boggle_solver 0.0.1 → 0.0.2
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/boggle_solver-0.0.1.gem +0 -0
- data/boggle_solver.gemspec +1 -1
- data/lib/boggle_solver/adjacency_matrix.rb +1 -1
- data/lib/boggle_solver/options.rb +6 -0
- data/test/test_adjacency_matrix.rb +93 -0
- data/test/test_board.rb +1 -0
- metadata +18 -14
Binary file
|
data/boggle_solver.gemspec
CHANGED
@@ -3,7 +3,7 @@ Gem::Specification.new do |s|
|
|
3
3
|
s.summary = "Find all words in a letter matrix"
|
4
4
|
s.description = "File.read(File.join(File.dirname(__FILE__), 'README'))"
|
5
5
|
s.requirements = "[ 'An installed dictionary (most Unix systems have one)']"
|
6
|
-
s.version = "0.0.
|
6
|
+
s.version = "0.0.2"
|
7
7
|
s.author = "Casey Robinson"
|
8
8
|
s.email = "kc@rampantmonkey.com"
|
9
9
|
s.homepage = "http://rampantmonkey.com"
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module BoggleSolver
|
2
2
|
|
3
3
|
class AdjacencyMatrix
|
4
|
+
attr_reader :visited, :finished
|
4
5
|
|
5
6
|
def initialize( n = 2 )
|
6
7
|
@m = Array.new(n, 0)
|
@@ -42,7 +43,6 @@ module BoggleSolver
|
|
42
43
|
|
43
44
|
def depth_first_search_visit(u, *)
|
44
45
|
@visited[u] = 1
|
45
|
-
puts u
|
46
46
|
adjacent(u).each { |v| depth_first_search_visit(v) if @visited[v].nil?}
|
47
47
|
@finished[u] = 1
|
48
48
|
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'shoulda'
|
3
|
+
require_relative '../lib/boggle_solver/adjacency_matrix'
|
4
|
+
|
5
|
+
class TestAdjacencyMatrix < Test::Unit::TestCase
|
6
|
+
|
7
|
+
context "basics" do
|
8
|
+
setup do
|
9
|
+
@matrix = BoggleSolver::AdjacencyMatrix.new(4)
|
10
|
+
end
|
11
|
+
|
12
|
+
should "print matrix as square" do
|
13
|
+
assert_equal "0 0 0 0 \n0 0 0 0 \n0 0 0 0 \n0 0 0 0 ", @matrix.to_s
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context "directed edges" do
|
18
|
+
setup do
|
19
|
+
@matrix = BoggleSolver::AdjacencyMatrix.new(4)
|
20
|
+
end
|
21
|
+
|
22
|
+
should "add one directed edge from v1 to v3" do
|
23
|
+
@matrix.add_directed_edge(1,3)
|
24
|
+
assert_equal "0 0 0 0 \n0 0 0 1 \n0 0 0 0 \n0 0 0 0 ", @matrix.to_s
|
25
|
+
end
|
26
|
+
|
27
|
+
should "add weighted directed edge from v3 to v1" do
|
28
|
+
@matrix.add_directed_edge(3,1, 7)
|
29
|
+
assert_equal "0 0 0 0 \n0 0 0 0 \n0 0 0 0 \n0 7 0 0 ", @matrix.to_s
|
30
|
+
end
|
31
|
+
|
32
|
+
should "store multiple directed edges" do
|
33
|
+
@matrix.add_directed_edge(2,1)
|
34
|
+
@matrix.add_directed_edge(3,1)
|
35
|
+
@matrix.add_directed_edge(0,3)
|
36
|
+
assert_equal "0 0 0 1 \n0 0 0 0 \n0 1 0 0 \n0 1 0 0 ", @matrix.to_s
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context "undirected edges" do
|
41
|
+
setup do
|
42
|
+
@matrix = BoggleSolver::AdjacencyMatrix.new(4)
|
43
|
+
end
|
44
|
+
|
45
|
+
should "add undirected edge between v0 and v2" do
|
46
|
+
@matrix.add_edge(0,2)
|
47
|
+
assert_equal "0 0 1 0 \n0 0 0 0 \n1 0 0 0 \n0 0 0 0 ", @matrix.to_s
|
48
|
+
end
|
49
|
+
|
50
|
+
should "add weighted undirected edge between v0 and v2" do
|
51
|
+
@matrix.add_edge(0,2,8)
|
52
|
+
assert_equal "0 0 8 0 \n0 0 0 0 \n8 0 0 0 \n0 0 0 0 ", @matrix.to_s
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context "adjacent" do
|
57
|
+
setup do
|
58
|
+
@n = 5
|
59
|
+
@matrix = BoggleSolver::AdjacencyMatrix.new(@n)
|
60
|
+
end
|
61
|
+
|
62
|
+
should "return empty array since no edges have been added" do
|
63
|
+
(0...@n).each { |i| assert_equal [], @matrix.adjacent(i)}
|
64
|
+
end
|
65
|
+
|
66
|
+
should "add 3 edges" do
|
67
|
+
@matrix.add_edge(0,1)
|
68
|
+
@matrix.add_edge(0,2)
|
69
|
+
@matrix.add_edge(0,4)
|
70
|
+
assert_equal [1,2,4], @matrix.adjacent(0)
|
71
|
+
assert_equal [0], @matrix.adjacent(1)
|
72
|
+
assert_equal [0], @matrix.adjacent(2)
|
73
|
+
assert_equal [], @matrix.adjacent(3)
|
74
|
+
assert_equal [0], @matrix.adjacent(4)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
context "depth first search" do
|
79
|
+
setup do
|
80
|
+
@n = 5
|
81
|
+
@matrix = BoggleSolver::AdjacencyMatrix.new(@n)
|
82
|
+
@matrix.depth_first_search
|
83
|
+
end
|
84
|
+
|
85
|
+
should "visit all verticies" do
|
86
|
+
(0...@n).each { |i| assert_not_nil @matrix.visited[i] }
|
87
|
+
end
|
88
|
+
|
89
|
+
should "finish all verticies" do
|
90
|
+
(0...@n).each { |i| assert_not_nil @matrix.finished[i] }
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
data/test/test_board.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: boggle_solver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
4
|
+
version: 0.0.2
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Casey Robinson
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-05-15 00:00:00.
|
12
|
+
date: 2012-05-15 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: File.read(File.join(File.dirname(__FILE__), 'README'))
|
15
15
|
email: kc@rampantmonkey.com
|
@@ -18,37 +18,41 @@ executables:
|
|
18
18
|
extensions: []
|
19
19
|
extra_rdoc_files: []
|
20
20
|
files:
|
21
|
+
- bin/boggle_solver
|
21
22
|
- boggle_solver-0.0.1.gem
|
22
23
|
- boggle_solver.gemspec
|
23
|
-
- README.markdown
|
24
|
-
- bin/boggle_solver
|
25
24
|
- lib/boggle_solver/adjacency_matrix.rb
|
26
25
|
- lib/boggle_solver/board.rb
|
26
|
+
- lib/boggle_solver/options.rb
|
27
27
|
- lib/boggle_solver/runner.rb
|
28
|
+
- README.markdown
|
29
|
+
- test/test_adjacency_matrix.rb
|
30
|
+
- test/test_board.rb
|
28
31
|
homepage: http://rampantmonkey.com
|
29
32
|
licenses: []
|
30
|
-
post_install_message:
|
33
|
+
post_install_message:
|
31
34
|
rdoc_options: []
|
32
35
|
require_paths:
|
33
36
|
- lib
|
34
37
|
required_ruby_version: !ruby/object:Gem::Requirement
|
38
|
+
none: false
|
35
39
|
requirements:
|
36
40
|
- - ! '>='
|
37
41
|
- !ruby/object:Gem::Version
|
38
42
|
version: '1.9'
|
39
|
-
none: false
|
40
43
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
44
|
+
none: false
|
41
45
|
requirements:
|
42
46
|
- - ! '>='
|
43
47
|
- !ruby/object:Gem::Version
|
44
48
|
version: '0'
|
45
|
-
none: false
|
46
49
|
requirements:
|
47
50
|
- ! '[ ''An installed dictionary (most Unix systems have one)'']'
|
48
|
-
rubyforge_project:
|
49
|
-
rubygems_version: 1.8.
|
50
|
-
signing_key:
|
51
|
+
rubyforge_project:
|
52
|
+
rubygems_version: 1.8.22
|
53
|
+
signing_key:
|
51
54
|
specification_version: 3
|
52
55
|
summary: Find all words in a letter matrix
|
53
|
-
test_files:
|
54
|
-
|
56
|
+
test_files:
|
57
|
+
- test/test_adjacency_matrix.rb
|
58
|
+
- test/test_board.rb
|