manywords 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0facce806f1a0848860e6a4979e2aaf3490670ee
4
- data.tar.gz: 668abe4571f4572595a3c1d9eba01a945fe3a9a1
3
+ metadata.gz: 068826be1367e214edc2e5aee1b4a007a4ef610a
4
+ data.tar.gz: a4b8561186ee20a416832792c8d5d6c91da6f36f
5
5
  SHA512:
6
- metadata.gz: a04a8cdf330f52f5c765610ab43debc09b320a3090297ee19f14e4552a990dc1e0071269098e3d64622c8140867640e28b809e0018af9f07799a15a3c9a70a6b
7
- data.tar.gz: 375101bbb42c48cad6df8ca65603e86881bc35a3eec60e52f9d3cdc379870606177809daac764f835c7f969880fbe6c6d6b9825fc0f8ada4c7ae6e58cc5b712c
6
+ metadata.gz: 15ad3dafec2908e8b9fb704e5578a38569a17345f39ca062359a47c9c5027566a7c8a9d346bc0496458ddcbc5d4d4fdadfd1b5390822f64b77fe6e1e027e80d3
7
+ data.tar.gz: 31c435ff23119acaa89a128f55154c39e38bc894032b43f9c36ccbf5d2d7a06da0d20761d7cb1ecb1fdd4578971763edc41a569505985bf220c18ff1b7e8155e
data/CHANGELOG.md ADDED
@@ -0,0 +1,14 @@
1
+ # Changelog
2
+
3
+ ## 0.0.2
4
+
5
+ * Wildcards (+) are now expanded.
6
+ * Relaxed ruby version to >= 1.9.0.
7
+ * Testing of permutation generation.
8
+ * No more fabulous tests.
9
+ * Added this changelog.
10
+
11
+ ## 0.0.1
12
+
13
+ * Initial commit.
14
+
@@ -12,14 +12,14 @@ module Manywords
12
12
  main do |letters, pattern = ''|
13
13
  # Make sure the given dictionary exists
14
14
  unless File.exists? options['dictionary']
15
- $stderr.puts "Could not load the dictionary"
15
+ fatal "Could not load the dictionary"
16
16
  return
17
17
  end
18
18
 
19
19
  # Load the dictionary
20
20
  dictionary = DictionaryNode.new
21
21
  File.open(options['dictionary'], 'r') do |file|
22
- puts "Reading the dictionary..."
22
+ info "Reading the dictionary..."
23
23
 
24
24
  file.each_line do |line|
25
25
  # Skip proper nouns
@@ -36,7 +36,7 @@ module Manywords
36
36
  dictionary.add_word line
37
37
  end
38
38
 
39
- puts "Read #{dictionary.count} words."
39
+ info "Read #{dictionary.count} words."
40
40
  end
41
41
 
42
42
  # Construct the pattern if given
@@ -57,7 +57,8 @@ module Manywords
57
57
  end
58
58
 
59
59
  version Manywords::VERSION
60
- description 'Determine word combinations'
60
+ description 'Determine word combinations given a series of letters and an optional regular expression to filter.'
61
+
61
62
  arg :letters, :required
62
63
  arg :pattern, :optional
63
64
 
@@ -1,3 +1,3 @@
1
1
  module Manywords
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -20,7 +20,13 @@ module Manywords
20
20
  next_available = available.dup
21
21
  next_available.delete_at(idx)
22
22
 
23
- permutations prefix + [ letter ], next_available, &block
23
+ if letter == '+'
24
+ ('a'..'z').each do
25
+ |l| permutations prefix + [ l ], next_available, &block
26
+ end
27
+ else
28
+ permutations prefix + [ letter ], next_available, &block
29
+ end
24
30
  end
25
31
  end
26
32
  end
data/manywords.gemspec CHANGED
@@ -23,5 +23,5 @@ Gem::Specification.new do |spec|
23
23
 
24
24
  spec.add_dependency "methadone", "~> 1.2.6"
25
25
 
26
- spec.required_ruby_version = '>= 2.0.0'
26
+ spec.required_ruby_version = '>= 1.9.0'
27
27
  end
@@ -0,0 +1,182 @@
1
+ require_relative '../../test_helper'
2
+
3
+ module Manywords
4
+
5
+ describe Walker do
6
+
7
+ it "must walk a sequence in order" do
8
+ data = []
9
+
10
+ walker = Walker.new
11
+ walker.walk "3210" do |word|
12
+ data << word
13
+ end
14
+
15
+ data.count.must_equal 65
16
+
17
+ data[0].must_equal []
18
+ data[1].must_equal %w{ 0 }
19
+ data[2].must_equal %w{ 0 1 }
20
+ data[3].must_equal %w{ 0 1 2 }
21
+ data[4].must_equal %w{ 0 1 2 3 }
22
+ data[5].must_equal %w{ 0 1 3 }
23
+ data[6].must_equal %w{ 0 1 3 2 }
24
+ data[7].must_equal %w{ 0 2 }
25
+ data[8].must_equal %w{ 0 2 1 }
26
+ data[9].must_equal %w{ 0 2 1 3 }
27
+ data[10].must_equal %w{ 0 2 3 }
28
+ data[11].must_equal %w{ 0 2 3 1 }
29
+ data[12].must_equal %w{ 0 3 }
30
+ data[13].must_equal %w{ 0 3 1 }
31
+ data[14].must_equal %w{ 0 3 1 2 }
32
+ data[15].must_equal %w{ 0 3 2 }
33
+ data[16].must_equal %w{ 0 3 2 1 }
34
+ data[17].must_equal %w{ 1 }
35
+ data[18].must_equal %w{ 1 0 }
36
+ data[19].must_equal %w{ 1 0 2 }
37
+ data[20].must_equal %w{ 1 0 2 3 }
38
+ data[21].must_equal %w{ 1 0 3 }
39
+ data[22].must_equal %w{ 1 0 3 2 }
40
+ data[23].must_equal %w{ 1 2 }
41
+ data[24].must_equal %w{ 1 2 0 }
42
+ data[25].must_equal %w{ 1 2 0 3 }
43
+ data[26].must_equal %w{ 1 2 3 }
44
+ data[27].must_equal %w{ 1 2 3 0 }
45
+ data[28].must_equal %w{ 1 3 }
46
+ data[29].must_equal %w{ 1 3 0 }
47
+ data[30].must_equal %w{ 1 3 0 2 }
48
+ data[31].must_equal %w{ 1 3 2 }
49
+ data[32].must_equal %w{ 1 3 2 0 }
50
+ data[33].must_equal %w{ 2 }
51
+ data[34].must_equal %w{ 2 0 }
52
+ data[35].must_equal %w{ 2 0 1 }
53
+ data[36].must_equal %w{ 2 0 1 3 }
54
+ data[37].must_equal %w{ 2 0 3 }
55
+ data[38].must_equal %w{ 2 0 3 1 }
56
+ data[39].must_equal %w{ 2 1 }
57
+ data[40].must_equal %w{ 2 1 0 }
58
+ data[41].must_equal %w{ 2 1 0 3 }
59
+ data[42].must_equal %w{ 2 1 3 }
60
+ data[43].must_equal %w{ 2 1 3 0 }
61
+ data[44].must_equal %w{ 2 3 }
62
+ data[45].must_equal %w{ 2 3 0 }
63
+ data[46].must_equal %w{ 2 3 0 1 }
64
+ data[47].must_equal %w{ 2 3 1 }
65
+ data[48].must_equal %w{ 2 3 1 0 }
66
+ data[49].must_equal %w{ 3 }
67
+ data[50].must_equal %w{ 3 0 }
68
+ data[51].must_equal %w{ 3 0 1 }
69
+ data[52].must_equal %w{ 3 0 1 2 }
70
+ data[53].must_equal %w{ 3 0 2 }
71
+ data[54].must_equal %w{ 3 0 2 1 }
72
+ data[55].must_equal %w{ 3 1 }
73
+ data[56].must_equal %w{ 3 1 0 }
74
+ data[57].must_equal %w{ 3 1 0 2 }
75
+ data[58].must_equal %w{ 3 1 2 }
76
+ data[59].must_equal %w{ 3 1 2 0 }
77
+ data[60].must_equal %w{ 3 2 }
78
+ data[61].must_equal %w{ 3 2 0 }
79
+ data[62].must_equal %w{ 3 2 0 1 }
80
+ data[63].must_equal %w{ 3 2 1 }
81
+ data[64].must_equal %w{ 3 2 1 0 }
82
+ end
83
+
84
+ it "must expand pluses to every letter" do
85
+ data = []
86
+
87
+ walker = Walker.new
88
+ walker.walk "a+" do |word|
89
+ data << word
90
+ end
91
+
92
+ # 26 * 2 for each letter of the +
93
+ # 26 for each a combination
94
+ # 1 single a, 1 blank
95
+ data.count.must_equal 80
96
+
97
+ data[0].must_equal []
98
+ data[1].must_equal %w{ a }
99
+ data[2].must_equal %w{ a a }
100
+ data[3].must_equal %w{ b }
101
+ data[4].must_equal %w{ b a }
102
+ data[5].must_equal %w{ c }
103
+ data[6].must_equal %w{ c a }
104
+ data[7].must_equal %w{ d }
105
+ data[8].must_equal %w{ d a }
106
+ data[9].must_equal %w{ e }
107
+ data[10].must_equal %w{ e a }
108
+ data[11].must_equal %w{ f }
109
+ data[12].must_equal %w{ f a }
110
+ data[13].must_equal %w{ g }
111
+ data[14].must_equal %w{ g a }
112
+ data[15].must_equal %w{ h }
113
+ data[16].must_equal %w{ h a }
114
+ data[17].must_equal %w{ i }
115
+ data[18].must_equal %w{ i a }
116
+ data[19].must_equal %w{ j }
117
+ data[20].must_equal %w{ j a }
118
+ data[21].must_equal %w{ k }
119
+ data[22].must_equal %w{ k a }
120
+ data[23].must_equal %w{ l }
121
+ data[24].must_equal %w{ l a }
122
+ data[25].must_equal %w{ m }
123
+ data[26].must_equal %w{ m a }
124
+ data[27].must_equal %w{ n }
125
+ data[28].must_equal %w{ n a }
126
+ data[29].must_equal %w{ o }
127
+ data[30].must_equal %w{ o a }
128
+ data[31].must_equal %w{ p }
129
+ data[32].must_equal %w{ p a }
130
+ data[33].must_equal %w{ q }
131
+ data[34].must_equal %w{ q a }
132
+ data[35].must_equal %w{ r }
133
+ data[36].must_equal %w{ r a }
134
+ data[37].must_equal %w{ s }
135
+ data[38].must_equal %w{ s a }
136
+ data[39].must_equal %w{ t }
137
+ data[40].must_equal %w{ t a }
138
+ data[41].must_equal %w{ u }
139
+ data[42].must_equal %w{ u a }
140
+ data[43].must_equal %w{ v }
141
+ data[44].must_equal %w{ v a }
142
+ data[45].must_equal %w{ w }
143
+ data[46].must_equal %w{ w a }
144
+ data[47].must_equal %w{ x }
145
+ data[48].must_equal %w{ x a }
146
+ data[49].must_equal %w{ y }
147
+ data[50].must_equal %w{ y a }
148
+ data[51].must_equal %w{ z }
149
+ data[52].must_equal %w{ z a }
150
+ data[53].must_equal %w{ a }
151
+ data[54].must_equal %w{ a a }
152
+ data[55].must_equal %w{ a b }
153
+ data[56].must_equal %w{ a c }
154
+ data[57].must_equal %w{ a d }
155
+ data[58].must_equal %w{ a e }
156
+ data[59].must_equal %w{ a f }
157
+ data[60].must_equal %w{ a g }
158
+ data[61].must_equal %w{ a h }
159
+ data[62].must_equal %w{ a i }
160
+ data[63].must_equal %w{ a j }
161
+ data[64].must_equal %w{ a k }
162
+ data[65].must_equal %w{ a l }
163
+ data[66].must_equal %w{ a m }
164
+ data[67].must_equal %w{ a n }
165
+ data[68].must_equal %w{ a o }
166
+ data[69].must_equal %w{ a p }
167
+ data[70].must_equal %w{ a q }
168
+ data[71].must_equal %w{ a r }
169
+ data[72].must_equal %w{ a s }
170
+ data[73].must_equal %w{ a t }
171
+ data[74].must_equal %w{ a u }
172
+ data[75].must_equal %w{ a v }
173
+ data[76].must_equal %w{ a w }
174
+ data[77].must_equal %w{ a x }
175
+ data[78].must_equal %w{ a y }
176
+ data[79].must_equal %w{ a z }
177
+ end
178
+
179
+ end
180
+
181
+ end
182
+
data/test/test_helper.rb CHANGED
@@ -1,4 +1,3 @@
1
1
  require 'minitest/autorun'
2
- require 'minitest/pride'
3
2
  require File.expand_path('../../lib/manywords.rb', __FILE__)
4
3
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: manywords
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen H. Gerstacker
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-03-17 00:00:00.000000000 Z
11
+ date: 2013-03-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -61,6 +61,7 @@ extensions: []
61
61
  extra_rdoc_files: []
62
62
  files:
63
63
  - .gitignore
64
+ - CHANGELOG.md
64
65
  - Gemfile
65
66
  - LICENSE.txt
66
67
  - README.md
@@ -74,6 +75,7 @@ files:
74
75
  - manywords.gemspec
75
76
  - test/lib/manywords/dictionary_node_test.rb
76
77
  - test/lib/manywords/version_test.rb
78
+ - test/lib/manywords/walker_test.rb
77
79
  - test/test_helper.rb
78
80
  homepage: http://shortround.net
79
81
  licenses:
@@ -87,7 +89,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
87
89
  requirements:
88
90
  - - '>='
89
91
  - !ruby/object:Gem::Version
90
- version: 2.0.0
92
+ version: 1.9.0
91
93
  required_rubygems_version: !ruby/object:Gem::Requirement
92
94
  requirements:
93
95
  - - '>='
@@ -102,4 +104,5 @@ summary: Given a set of random letters, find all of the words in it
102
104
  test_files:
103
105
  - test/lib/manywords/dictionary_node_test.rb
104
106
  - test/lib/manywords/version_test.rb
107
+ - test/lib/manywords/walker_test.rb
105
108
  - test/test_helper.rb