eulers_day_off 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +1 -0
- data/eulers_day_off.gemspec +22 -0
- data/lib/eulers_day_off/letter_generator.rb +13 -0
- data/lib/eulers_day_off/scorer.rb +34 -0
- data/lib/eulers_day_off/word_list.rb +16 -0
- data/lib/eulers_day_off/word_loader.rb +20 -0
- data/lib/eulers_day_off.rb +28 -0
- data/lib/version.rb +3 -0
- data/lib/word_list.txt +13979 -0
- data/spec/eulers_day_off_spec.rb +26 -0
- data/spec/letter_generator_spec.rb +20 -0
- data/spec/scorer_spec.rb +35 -0
- data/spec/spec_helper.rb +2 -0
- data/spec/word_list_spec.rb +11 -0
- data/spec/word_loader_spec.rb +23 -0
- metadata +109 -0
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe EulersDayOff do
|
4
|
+
it "can generate a random list of 25 letters" do
|
5
|
+
letters = EulersDayOff.random_letters
|
6
|
+
|
7
|
+
letters.size.should == 25
|
8
|
+
letters.each do |letter|
|
9
|
+
letter.should match(/\A[a-z]{1}\z/)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
it "can score a 5 x 5 board, ignoring pluals" do
|
14
|
+
board = [ %w(c a t b y),
|
15
|
+
%w(n r e u k),
|
16
|
+
%w(m t a m s),
|
17
|
+
%w(b t m s q),
|
18
|
+
%w(i y s v w) ]
|
19
|
+
|
20
|
+
EulersDayOff.score(board).should == 3 + # cat
|
21
|
+
3 + # tam
|
22
|
+
3 + # art
|
23
|
+
4 + # team
|
24
|
+
3 # bum
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe EulersDayOff::LetterGenerator do
|
4
|
+
let(:generator) { EulersDayOff::LetterGenerator.new }
|
5
|
+
|
6
|
+
before do
|
7
|
+
@mock = double()
|
8
|
+
generator.letters = @mock
|
9
|
+
end
|
10
|
+
|
11
|
+
it "generates 25 letters" do
|
12
|
+
@mock.should_receive(:sample).exactly(25).times.and_return('a')
|
13
|
+
|
14
|
+
random_letters = generator.generate
|
15
|
+
|
16
|
+
random_letters.size.should == 25
|
17
|
+
random_letters.each { |letter| letter.should == 'a' }
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
data/spec/scorer_spec.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe EulersDayOff::Scorer do
|
4
|
+
|
5
|
+
let(:scorer) { EulersDayOff::Scorer.new(stub(:include? => true)) }
|
6
|
+
|
7
|
+
it "gives a score of 0 for empty boards" do
|
8
|
+
scorer.score(Array.new(5) { Array.new(5) }).should == 0
|
9
|
+
end
|
10
|
+
|
11
|
+
it "can score a coloum that starts with a word" do
|
12
|
+
board = [ ["c", "a", "t", nil, nil], Array.new(5), Array.new(5), Array.new(5), Array.new(5) ]
|
13
|
+
|
14
|
+
scorer.score(board).should == 3
|
15
|
+
end
|
16
|
+
|
17
|
+
it "can score a coloum that ends with a word" do
|
18
|
+
board = [ [nil, nil, "c", "a", "t"], Array.new(5), Array.new(5), Array.new(5), Array.new(5) ]
|
19
|
+
|
20
|
+
scorer.score(board).should == 3
|
21
|
+
end
|
22
|
+
|
23
|
+
it "can score a row that starts with a word" do
|
24
|
+
board = [ ["c", nil, nil, nil, nil], ["a", nil, nil, nil, nil], ["t", nil, nil, nil, nil], Array.new(5), Array.new(5) ]
|
25
|
+
|
26
|
+
scorer.score(board).should == 3
|
27
|
+
end
|
28
|
+
|
29
|
+
it "can score a row that ends with a word" do
|
30
|
+
board = [ Array.new(5), Array.new(5), ["c", nil, nil, nil, nil], ["a", nil, nil, nil, nil], ["t", nil, nil, nil, nil] ]
|
31
|
+
|
32
|
+
scorer.score(board).should == 3
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe EulersDayOff::WordLoader do
|
4
|
+
let(:loader) { EulersDayOff::WordLoader.new("FAKE_PATH") }
|
5
|
+
|
6
|
+
before do
|
7
|
+
@file_mock = double("file")
|
8
|
+
loader.file = @file_mock
|
9
|
+
end
|
10
|
+
|
11
|
+
it "creates a bloom filter from the word list" do
|
12
|
+
@file_mock.should_receive(:each_line).and_yield("cat\n").and_yield("dog")
|
13
|
+
|
14
|
+
bloom_filter_mock = double("bloom filter")
|
15
|
+
bloom_filter_mock.should_receive(:insert).with('cat')
|
16
|
+
bloom_filter_mock.should_receive(:insert).with('dog')
|
17
|
+
|
18
|
+
word_list = loader.populate_word_list(bloom_filter_mock)
|
19
|
+
|
20
|
+
word_list.should be(bloom_filter_mock)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
metadata
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: eulers_day_off
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
version: 0.1.0
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Eric Koslow
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2013-01-23 00:00:00 -06:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: rake
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
version: "0"
|
30
|
+
type: :development
|
31
|
+
version_requirements: *id001
|
32
|
+
- !ruby/object:Gem::Dependency
|
33
|
+
name: rspec
|
34
|
+
prerelease: false
|
35
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
segments:
|
40
|
+
- 0
|
41
|
+
version: "0"
|
42
|
+
type: :development
|
43
|
+
version_requirements: *id002
|
44
|
+
description: Scores Euler's Day Off boards
|
45
|
+
email:
|
46
|
+
- ekoslow+eulersdayoff@gmail.com
|
47
|
+
executables: []
|
48
|
+
|
49
|
+
extensions: []
|
50
|
+
|
51
|
+
extra_rdoc_files: []
|
52
|
+
|
53
|
+
files:
|
54
|
+
- .gitignore
|
55
|
+
- Gemfile
|
56
|
+
- LICENSE.txt
|
57
|
+
- README.md
|
58
|
+
- Rakefile
|
59
|
+
- eulers_day_off.gemspec
|
60
|
+
- lib/eulers_day_off.rb
|
61
|
+
- lib/eulers_day_off/letter_generator.rb
|
62
|
+
- lib/eulers_day_off/scorer.rb
|
63
|
+
- lib/eulers_day_off/word_list.rb
|
64
|
+
- lib/eulers_day_off/word_loader.rb
|
65
|
+
- lib/version.rb
|
66
|
+
- lib/word_list.txt
|
67
|
+
- spec/eulers_day_off_spec.rb
|
68
|
+
- spec/letter_generator_spec.rb
|
69
|
+
- spec/scorer_spec.rb
|
70
|
+
- spec/spec_helper.rb
|
71
|
+
- spec/word_list_spec.rb
|
72
|
+
- spec/word_loader_spec.rb
|
73
|
+
has_rdoc: true
|
74
|
+
homepage: https://github.com/ekosz/eulers_day_off
|
75
|
+
licenses: []
|
76
|
+
|
77
|
+
post_install_message:
|
78
|
+
rdoc_options: []
|
79
|
+
|
80
|
+
require_paths:
|
81
|
+
- lib
|
82
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
segments:
|
87
|
+
- 0
|
88
|
+
version: "0"
|
89
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - ">="
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
segments:
|
94
|
+
- 0
|
95
|
+
version: "0"
|
96
|
+
requirements: []
|
97
|
+
|
98
|
+
rubyforge_project:
|
99
|
+
rubygems_version: 1.3.6
|
100
|
+
signing_key:
|
101
|
+
specification_version: 3
|
102
|
+
summary: Scores Euler's Day Off boards
|
103
|
+
test_files:
|
104
|
+
- spec/eulers_day_off_spec.rb
|
105
|
+
- spec/letter_generator_spec.rb
|
106
|
+
- spec/scorer_spec.rb
|
107
|
+
- spec/spec_helper.rb
|
108
|
+
- spec/word_list_spec.rb
|
109
|
+
- spec/word_loader_spec.rb
|