boggle_solver 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/boggle_solver.gemspec +5 -2
- data/lib/boggle_solver/board.rb +14 -5
- data/lib/boggle_solver/options.rb +4 -3
- data/lib/boggle_solver/runner.rb +1 -1
- data/pkg/boggle_solver-0.0.2.gem +0 -0
- data/pkg/boggle_solver-0.0.3.gem +0 -0
- data/test/test_options.rb +43 -0
- metadata +14 -34
- data/boggle_solver-0.0.2.gem +0 -0
data/boggle_solver.gemspec
CHANGED
@@ -1,9 +1,12 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "boggle_solver"
|
3
3
|
s.summary = "Find all words in a letter matrix"
|
4
|
-
s.description =
|
4
|
+
s.description = "Ruby program that employs graph theory to solve a word matrix puzzle (Boggle).
|
5
|
+
|
6
|
+
# Introduction
|
7
|
+
Boggle Master consists of a 5x5 grid of letters. The goal of the game is to make as many words as possible from this grid by connecting neighboring letters. To generate a random puzzle the game uses 25 dice with letters on each side. The dice are shaken and each fall into a slot in the grid."
|
5
8
|
s.requirements = "[ 'An installed dictionary (most Unix systems have one)']"
|
6
|
-
s.version = "0.0.
|
9
|
+
s.version = "0.0.4"
|
7
10
|
s.author = "Casey Robinson"
|
8
11
|
s.email = "kc@rampantmonkey.com"
|
9
12
|
s.homepage = "http://rampantmonkey.com"
|
data/lib/boggle_solver/board.rb
CHANGED
@@ -6,21 +6,29 @@ module BoggleSolver
|
|
6
6
|
class Board < AdjacencyMatrix
|
7
7
|
attr_reader :words
|
8
8
|
|
9
|
-
def initialize(mode=:default)
|
9
|
+
def initialize(mode=:default, input, dictionary_file)
|
10
10
|
super(25)
|
11
11
|
connect
|
12
12
|
@board = []
|
13
13
|
if mode == :random
|
14
14
|
@prng = Random.new
|
15
15
|
generate_random_board
|
16
|
+
elsif mode == :given
|
17
|
+
@board = input.split(//)
|
16
18
|
else
|
17
19
|
generate_board
|
18
20
|
end
|
21
|
+
calculate_board_hash
|
19
22
|
puts self
|
20
23
|
@words = []
|
24
|
+
set_dictionary dictionary_file
|
21
25
|
load_dictionary
|
22
26
|
end
|
23
27
|
|
28
|
+
def set_dictionary file
|
29
|
+
@dictionary_file = file
|
30
|
+
end
|
31
|
+
|
24
32
|
def connect
|
25
33
|
j=0;
|
26
34
|
while j<25 do
|
@@ -38,13 +46,15 @@ module BoggleSolver
|
|
38
46
|
|
39
47
|
def generate_board
|
40
48
|
@board = ["a", "r", "t", "a", "c", "c", "e", "a", "r", "d", "f", "e", "w", "o", "o", "n", "p", "l", "m", "i", "c", "r", "u", "b", "l"]
|
41
|
-
|
49
|
+
end
|
50
|
+
|
51
|
+
def load_board_from_string s
|
52
|
+
@board = s.split(//) if s.length == 25
|
42
53
|
end
|
43
54
|
|
44
55
|
def generate_random_board
|
45
56
|
@board = Array.new(25)
|
46
57
|
@board.map!{|item| (65.+rand(25)).chr.downcase!}
|
47
|
-
calculate_board_hash
|
48
58
|
end
|
49
59
|
|
50
60
|
def calculate_board_hash
|
@@ -53,10 +63,9 @@ module BoggleSolver
|
|
53
63
|
end
|
54
64
|
|
55
65
|
def load_dictionary
|
56
|
-
dictionary_file = "/usr/share/dict/words"
|
57
66
|
@dictionary = Array.new
|
58
67
|
|
59
|
-
File.foreach(dictionary_file) do |line|
|
68
|
+
File.foreach(@dictionary_file) do |line|
|
60
69
|
next_word = line.chomp
|
61
70
|
@dictionary.push next_word if possible? next_word
|
62
71
|
end
|
@@ -5,13 +5,14 @@ module BoggleSolver
|
|
5
5
|
|
6
6
|
DEFAULT_DICTIONARY = "/usr/share/dict/words"
|
7
7
|
|
8
|
-
attr_reader :dictionary, :mode
|
8
|
+
attr_reader :dictionary, :mode, :input
|
9
9
|
|
10
10
|
def initialize(argv)
|
11
11
|
@dictionary = DEFAULT_DICTIONARY
|
12
12
|
@mode = :default
|
13
13
|
parse(argv)
|
14
|
-
@input = argv
|
14
|
+
@input = argv[0]
|
15
|
+
@mode = :given unless argv.empty?
|
15
16
|
end
|
16
17
|
|
17
18
|
def parse(argv)
|
@@ -29,7 +30,7 @@ module BoggleSolver
|
|
29
30
|
end
|
30
31
|
|
31
32
|
begin
|
32
|
-
argv = ["-
|
33
|
+
argv = ["-r"] if argv.empty?
|
33
34
|
opts.parse!(argv)
|
34
35
|
rescue OptionParser::ParseError => e
|
35
36
|
STDERR.puts e.message, "\n", opts
|
data/lib/boggle_solver/runner.rb
CHANGED
data/pkg/boggle_solver-0.0.2.gem
CHANGED
Binary file
|
Binary file
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'shoulda'
|
3
|
+
require_relative '../lib/boggle_solver/options'
|
4
|
+
|
5
|
+
class TestOptions < Test::Unit::TestCase
|
6
|
+
|
7
|
+
context "specifying nothing" do
|
8
|
+
setup do
|
9
|
+
@opts = BoggleSolver::Options.new([])
|
10
|
+
end
|
11
|
+
|
12
|
+
should "return default dictionary" do
|
13
|
+
assert_equal BoggleSolver::Options::DEFAULT_DICTIONARY, @opts.dictionary
|
14
|
+
end
|
15
|
+
|
16
|
+
should "set mode to random" do
|
17
|
+
assert_equal @opts.mode, :random
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context "specifying a dictionary" do
|
22
|
+
should "return it" do
|
23
|
+
opts = BoggleSolver::Options.new(["-d", "mydict"])
|
24
|
+
assert_equal "mydict", opts.dictionary
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context "specifying the board with a string and nothing else" do
|
29
|
+
should "return the board" do
|
30
|
+
opts = BoggleSolver::Options.new(["abcdefghijklmnopqrstuvwxy"])
|
31
|
+
assert_equal "abcdefghijklmnopqrstuvwxy", opts.input
|
32
|
+
assert_equal opts.mode, :given
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context "specifying the board with a string and an extra word" do
|
37
|
+
should "return only the board" do
|
38
|
+
opts = BoggleSolver::Options.new(["abcdefghijklmnopqrstuvwxy", "extra stuff"])
|
39
|
+
assert_equal "abcdefghijklmnopqrstuvwxy", opts.input
|
40
|
+
assert_equal opts.mode, :given
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: boggle_solver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.4
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Casey Robinson
|
@@ -11,45 +11,22 @@ bindir: bin
|
|
11
11
|
cert_chain: []
|
12
12
|
date: 2012-05-15 00:00:00.000000000Z
|
13
13
|
dependencies: []
|
14
|
-
description: !
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
\n# Coordinate System\nBelow are the indicies used to represent the dice in the\
|
25
|
-
\ board:\n\n 0 1 2 3 4\n 5 6 7 8 9\n 10 11 12 13 \
|
26
|
-
\ 14\n 15 16 17 18 19\n 20 21 22 23 24\n\n# Connection Matrix\nAdjacency\
|
27
|
-
\ matrix representing the connections in Boggle:\n\n 0 1 0 0 0 1 1 0 0 0 0 0\
|
28
|
-
\ 0 0 0 0 0 0 0 0 0 0 0 0 0\n 1 0 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\
|
29
|
-
\ 0\n 0 1 0 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n 0 0 1 0 1 0 0 1\
|
30
|
-
\ 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0\
|
31
|
-
\ 0 0 0 0 0\n 1 1 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0\n 1 1 1 0\
|
32
|
-
\ 0 1 0 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0\n 0 1 1 1 0 0 1 0 1 0 0 1 1 1 0 0\
|
33
|
-
\ 0 0 0 0 0 0 0 0 0\n 0 0 1 1 1 0 0 1 0 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0\n \
|
34
|
-
\ 0 0 0 1 1 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0\n 0 0 0 0 0 1 1 0 0 0 0 1\
|
35
|
-
\ 0 0 0 1 1 0 0 0 0 0 0 0 0\n 0 0 0 0 0 1 1 1 0 0 1 0 1 0 0 1 1 1 0 0 0 0 0 0\
|
36
|
-
\ 0\n 0 0 0 0 0 0 1 1 1 0 0 1 0 1 0 0 1 1 1 0 0 0 0 0 0\n 0 0 0 0 0 0 0 1\
|
37
|
-
\ 1 1 0 0 1 0 1 0 0 1 1 1 0 0 0 0 0\n 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 1 1\
|
38
|
-
\ 0 0 0 0 0\n 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 1 1 0 0 0\n 0 0 0 0\
|
39
|
-
\ 0 0 0 0 0 0 1 1 1 0 0 1 0 1 0 0 1 1 1 0 0\n 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0\
|
40
|
-
\ 1 0 1 0 0 1 1 1 0\n 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 1 0 0 1 1 1\n \
|
41
|
-
\ 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 1 1\n 0 0 0 0 0 0 0 0 0 0 0 0\
|
42
|
-
\ 0 0 0 1 1 0 0 0 0 1 0 0 0\n 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 1 0\
|
43
|
-
\ 0\n 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 1 0\n 0 0 0 0 0 0 0 0\
|
44
|
-
\ 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 1\n 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1\
|
45
|
-
\ 0 0 0 1 0\n"
|
14
|
+
description: ! 'Ruby program that employs graph theory to solve a word matrix puzzle
|
15
|
+
(Boggle).
|
16
|
+
|
17
|
+
|
18
|
+
# Introduction
|
19
|
+
|
20
|
+
Boggle Master consists of a 5x5 grid of letters. The goal of the game is to make
|
21
|
+
as many words as possible from this grid by connecting neighboring letters. To generate
|
22
|
+
a random puzzle the game uses 25 dice with letters on each side. The dice are shaken
|
23
|
+
and each fall into a slot in the grid.'
|
46
24
|
email: kc@rampantmonkey.com
|
47
25
|
executables:
|
48
26
|
- boggle_solver
|
49
27
|
extensions: []
|
50
28
|
extra_rdoc_files: []
|
51
29
|
files:
|
52
|
-
- boggle_solver-0.0.2.gem
|
53
30
|
- boggle_solver.gemspec
|
54
31
|
- README.markdown
|
55
32
|
- bin/boggle_solver
|
@@ -59,8 +36,10 @@ files:
|
|
59
36
|
- lib/boggle_solver/runner.rb
|
60
37
|
- pkg/boggle_solver-0.0.1.gem
|
61
38
|
- pkg/boggle_solver-0.0.2.gem
|
39
|
+
- pkg/boggle_solver-0.0.3.gem
|
62
40
|
- test/test_adjacency_matrix.rb
|
63
41
|
- test/test_board.rb
|
42
|
+
- test/test_options.rb
|
64
43
|
homepage: http://rampantmonkey.com
|
65
44
|
licenses: []
|
66
45
|
post_install_message:
|
@@ -89,4 +68,5 @@ summary: Find all words in a letter matrix
|
|
89
68
|
test_files:
|
90
69
|
- test/test_adjacency_matrix.rb
|
91
70
|
- test/test_board.rb
|
71
|
+
- test/test_options.rb
|
92
72
|
...
|
data/boggle_solver-0.0.2.gem
DELETED
Binary file
|