manywords 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.
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