word_search 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +29 -0
  3. data/.gitignore +11 -0
  4. data/.rspec +3 -0
  5. data/.rubocop.yml +1166 -0
  6. data/.ruby-version +1 -0
  7. data/.travis.yml +5 -0
  8. data/Gemfile +3 -0
  9. data/LICENSE.txt +21 -0
  10. data/README.md +61 -0
  11. data/Rakefile +14 -0
  12. data/bin/console +8 -0
  13. data/bin/coverage +1 -0
  14. data/bin/setup +6 -0
  15. data/lib/word_search/generator/base.rb +28 -0
  16. data/lib/word_search/generator.rb +60 -0
  17. data/lib/word_search/plane/base.rb +52 -0
  18. data/lib/word_search/plane.rb +22 -0
  19. data/lib/word_search/position_word/base.rb +98 -0
  20. data/lib/word_search/solver.rb +15 -0
  21. data/lib/word_search/three_dimensional/direction.rb +37 -0
  22. data/lib/word_search/three_dimensional/generator.rb +35 -0
  23. data/lib/word_search/three_dimensional/plane.rb +89 -0
  24. data/lib/word_search/three_dimensional/point.rb +15 -0
  25. data/lib/word_search/three_dimensional/position_word.rb +29 -0
  26. data/lib/word_search/two_dimensional/direction.rb +17 -0
  27. data/lib/word_search/two_dimensional/generator.rb +35 -0
  28. data/lib/word_search/two_dimensional/plane.rb +57 -0
  29. data/lib/word_search/two_dimensional/point.rb +14 -0
  30. data/lib/word_search/two_dimensional/position_word.rb +28 -0
  31. data/lib/word_search/version.rb +3 -0
  32. data/lib/word_search/word_bank.rb +45 -0
  33. data/lib/word_search.rb +30 -0
  34. data/vendor/cache/activemodel-5.0.0.1.gem +0 -0
  35. data/vendor/cache/activesupport-5.0.0.1.gem +0 -0
  36. data/vendor/cache/ast-2.2.0.gem +0 -0
  37. data/vendor/cache/codeclimate-test-reporter-0.6.0.gem +0 -0
  38. data/vendor/cache/coderay-1.1.1.gem +0 -0
  39. data/vendor/cache/concurrent-ruby-1.0.2.gem +0 -0
  40. data/vendor/cache/diff-lcs-1.2.5.gem +0 -0
  41. data/vendor/cache/docile-1.1.5.gem +0 -0
  42. data/vendor/cache/i18n-0.7.0.gem +0 -0
  43. data/vendor/cache/json-2.0.2.gem +0 -0
  44. data/vendor/cache/method_source-0.8.2.gem +0 -0
  45. data/vendor/cache/minitest-5.9.0.gem +0 -0
  46. data/vendor/cache/parser-2.3.1.2.gem +0 -0
  47. data/vendor/cache/powerpack-0.1.1.gem +0 -0
  48. data/vendor/cache/pry-0.10.4.gem +0 -0
  49. data/vendor/cache/rainbow-2.1.0.gem +0 -0
  50. data/vendor/cache/rake-10.5.0.gem +0 -0
  51. data/vendor/cache/rspec-3.5.0.gem +0 -0
  52. data/vendor/cache/rspec-core-3.5.2.gem +0 -0
  53. data/vendor/cache/rspec-expectations-3.5.0.gem +0 -0
  54. data/vendor/cache/rspec-mocks-3.5.0.gem +0 -0
  55. data/vendor/cache/rspec-support-3.5.0.gem +0 -0
  56. data/vendor/cache/rubocop-0.42.0.gem +0 -0
  57. data/vendor/cache/ruby-enum-0.5.0.gem +0 -0
  58. data/vendor/cache/ruby-progressbar-1.8.1.gem +0 -0
  59. data/vendor/cache/simplecov-0.12.0.gem +0 -0
  60. data/vendor/cache/simplecov-html-0.10.0.gem +0 -0
  61. data/vendor/cache/slop-3.6.0.gem +0 -0
  62. data/vendor/cache/thread_safe-0.3.5.gem +0 -0
  63. data/vendor/cache/tzinfo-1.2.2.gem +0 -0
  64. data/vendor/cache/unicode-display_width-1.0.5.gem +0 -0
  65. data/word_search.gemspec +35 -0
  66. metadata +248 -0
@@ -0,0 +1,57 @@
1
+ module WordSearch
2
+ module TwoDimensional
3
+ class Plane < Plane::Base
4
+ def initialize(x, y)
5
+ @x, @y = x, y
6
+
7
+ initialize_plane do |x_point, y_point|
8
+ self[x_point][y_point] = Point.new(x_point, y_point)
9
+ end
10
+ end
11
+
12
+ def to_s
13
+ values.map do |row|
14
+ row.values.map(&:letter)
15
+ end.transpose.reverse.map(&:join).join("\n")
16
+ end
17
+
18
+ def add_letters
19
+ super do |x_point, y_point|
20
+ self[x_point][y_point].letter ||= random_letter
21
+ end
22
+ end
23
+
24
+ def total_points
25
+ x * y
26
+ end
27
+
28
+ def max
29
+ [x, y].max
30
+ end
31
+
32
+ class << self
33
+ def make_from_file(file)
34
+ string = File.read(file).split("\n").reverse
35
+
36
+ return false if string.collect(&:length).uniq.count > 1
37
+
38
+ make_word_search(string)
39
+ end
40
+
41
+ private
42
+
43
+ def make_word_search(string)
44
+ plane = new(string.collect(&:length).uniq.first, string.count)
45
+
46
+ string.each_with_index do |row, y|
47
+ row.split('').each_with_index do |letter, x|
48
+ plane[x][y] = Point.new(x, y, letter)
49
+ end
50
+ end
51
+
52
+ plane
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,14 @@
1
+ module WordSearch
2
+ module TwoDimensional
3
+ class Point
4
+ attr_accessor :x, :y, :letter
5
+ alias to_s letter
6
+
7
+ def initialize(x, y, letter = nil)
8
+ @x = x
9
+ @y = y
10
+ @letter = letter if letter
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,28 @@
1
+ module WordSearch
2
+ module TwoDimensional
3
+ class PositionWord < PositionWord::Base
4
+ private
5
+
6
+ def place_letter(letter)
7
+ plane[coordinate.x][coordinate.y].letter = letter
8
+ end
9
+
10
+ def update_coordinates
11
+ coordinate.x += direction.x
12
+ coordinate.y += direction.y
13
+ end
14
+
15
+ def positive_last_coordinates?
16
+ last_x >= 0 && last_y >= 0
17
+ end
18
+
19
+ def last_coordinates_in_plane?
20
+ last_x < plane.x && last_y < plane.y
21
+ end
22
+
23
+ def letter_at(position)
24
+ plane.dig(x_at(position), y_at(position)).letter
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,3 @@
1
+ module WordSearch
2
+ VERSION = '0.1.0'
3
+ end
@@ -0,0 +1,45 @@
1
+ module WordSearch
2
+ class WordBank < Array
3
+ include ActiveModel::Validations
4
+
5
+ validate :word_bank
6
+
7
+ def initialize(file)
8
+ return invalid_file unless valid_file?(file)
9
+ words = []
10
+
11
+ CSV.foreach(file) do |row|
12
+ row.each do |word|
13
+ words << word.strip.downcase if word.strip.length > 1
14
+ end
15
+ end
16
+
17
+ super words.uniq
18
+ end
19
+
20
+ def longest_length
21
+ @longest ||= collect(&:length).max.to_i
22
+ end
23
+
24
+ def longest_words
25
+ select do |word|
26
+ word.length == longest_length
27
+ end
28
+ end
29
+
30
+ private
31
+
32
+ def word_bank
33
+ errors.add(:base, 'Word bank cannot be empty') if blank?
34
+ end
35
+
36
+ def valid_file?(file)
37
+ File.file?(file) && File.extname(file) == '.csv'
38
+ end
39
+
40
+ def invalid_file
41
+ errors.add(:file, 'is invalid')
42
+ false
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,30 @@
1
+ require 'active_model'
2
+ require 'active_support'
3
+ require 'active_support/all'
4
+ require 'csv'
5
+ require 'ruby-enum'
6
+
7
+ require 'word_search/version'
8
+ require 'word_search/plane'
9
+ require 'word_search/word_bank'
10
+ require 'word_search/generator'
11
+ require 'word_search/solver'
12
+
13
+ require 'word_search/plane/base'
14
+ require 'word_search/generator/base'
15
+ require 'word_search/position_word/base'
16
+
17
+ require 'word_search/three_dimensional/plane'
18
+ require 'word_search/three_dimensional/point'
19
+ require 'word_search/three_dimensional/direction'
20
+ require 'word_search/three_dimensional/generator'
21
+ require 'word_search/three_dimensional/position_word'
22
+
23
+ require 'word_search/two_dimensional/plane'
24
+ require 'word_search/two_dimensional/point'
25
+ require 'word_search/two_dimensional/direction'
26
+ require 'word_search/two_dimensional/generator'
27
+ require 'word_search/two_dimensional/position_word'
28
+
29
+ module WordSearch
30
+ end
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,35 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'word_search/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'word_search'
8
+ spec.version = WordSearch::VERSION
9
+ spec.authors = ['npezza93']
10
+ spec.email = ['npezza93@gmail.com']
11
+
12
+ spec.summary = 'Word Search Generator and Solver'
13
+ spec.description = 'Makes word searches and solves them'
14
+ spec.homepage = 'https://www.github.com/npezza93/word_searcher'
15
+ spec.license = 'MIT'
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
18
+ f.match(%r{^(test|spec|features)/})
19
+ end
20
+ spec.bindir = 'exe'
21
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
+ spec.require_paths = ['lib']
23
+
24
+ spec.add_dependency 'activesupport', '< 5.1'
25
+ spec.add_dependency 'activemodel', '< 5.1'
26
+ spec.add_dependency 'ruby-enum', '~> 0.5.0'
27
+
28
+ spec.add_development_dependency 'bundler', '~> 1.11'
29
+ spec.add_development_dependency 'rake', '~> 10.0'
30
+ spec.add_development_dependency 'pry', '~> 0.10.4'
31
+ spec.add_development_dependency 'rspec', '~> 3.5'
32
+ spec.add_development_dependency 'simplecov', '~> 0.12.0'
33
+ spec.add_development_dependency 'rubocop', '~> 0.42.0'
34
+ spec.add_development_dependency 'codeclimate-test-reporter', '~> 0.6.0'
35
+ end
metadata ADDED
@@ -0,0 +1,248 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: word_search
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - npezza93
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-09-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "<"
18
+ - !ruby/object:Gem::Version
19
+ version: '5.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "<"
25
+ - !ruby/object:Gem::Version
26
+ version: '5.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activemodel
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "<"
32
+ - !ruby/object:Gem::Version
33
+ version: '5.1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "<"
39
+ - !ruby/object:Gem::Version
40
+ version: '5.1'
41
+ - !ruby/object:Gem::Dependency
42
+ name: ruby-enum
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.5.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.5.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.11'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.11'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '10.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '10.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: pry
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 0.10.4
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 0.10.4
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '3.5'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '3.5'
111
+ - !ruby/object:Gem::Dependency
112
+ name: simplecov
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 0.12.0
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 0.12.0
125
+ - !ruby/object:Gem::Dependency
126
+ name: rubocop
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 0.42.0
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 0.42.0
139
+ - !ruby/object:Gem::Dependency
140
+ name: codeclimate-test-reporter
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: 0.6.0
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: 0.6.0
153
+ description: Makes word searches and solves them
154
+ email:
155
+ - npezza93@gmail.com
156
+ executables: []
157
+ extensions: []
158
+ extra_rdoc_files: []
159
+ files:
160
+ - ".codeclimate.yml"
161
+ - ".gitignore"
162
+ - ".rspec"
163
+ - ".rubocop.yml"
164
+ - ".ruby-version"
165
+ - ".travis.yml"
166
+ - Gemfile
167
+ - LICENSE.txt
168
+ - README.md
169
+ - Rakefile
170
+ - bin/console
171
+ - bin/coverage
172
+ - bin/setup
173
+ - lib/word_search.rb
174
+ - lib/word_search/generator.rb
175
+ - lib/word_search/generator/base.rb
176
+ - lib/word_search/plane.rb
177
+ - lib/word_search/plane/base.rb
178
+ - lib/word_search/position_word/base.rb
179
+ - lib/word_search/solver.rb
180
+ - lib/word_search/three_dimensional/direction.rb
181
+ - lib/word_search/three_dimensional/generator.rb
182
+ - lib/word_search/three_dimensional/plane.rb
183
+ - lib/word_search/three_dimensional/point.rb
184
+ - lib/word_search/three_dimensional/position_word.rb
185
+ - lib/word_search/two_dimensional/direction.rb
186
+ - lib/word_search/two_dimensional/generator.rb
187
+ - lib/word_search/two_dimensional/plane.rb
188
+ - lib/word_search/two_dimensional/point.rb
189
+ - lib/word_search/two_dimensional/position_word.rb
190
+ - lib/word_search/version.rb
191
+ - lib/word_search/word_bank.rb
192
+ - vendor/cache/activemodel-5.0.0.1.gem
193
+ - vendor/cache/activesupport-5.0.0.1.gem
194
+ - vendor/cache/ast-2.2.0.gem
195
+ - vendor/cache/codeclimate-test-reporter-0.6.0.gem
196
+ - vendor/cache/coderay-1.1.1.gem
197
+ - vendor/cache/concurrent-ruby-1.0.2.gem
198
+ - vendor/cache/diff-lcs-1.2.5.gem
199
+ - vendor/cache/docile-1.1.5.gem
200
+ - vendor/cache/i18n-0.7.0.gem
201
+ - vendor/cache/json-2.0.2.gem
202
+ - vendor/cache/method_source-0.8.2.gem
203
+ - vendor/cache/minitest-5.9.0.gem
204
+ - vendor/cache/parser-2.3.1.2.gem
205
+ - vendor/cache/powerpack-0.1.1.gem
206
+ - vendor/cache/pry-0.10.4.gem
207
+ - vendor/cache/rainbow-2.1.0.gem
208
+ - vendor/cache/rake-10.5.0.gem
209
+ - vendor/cache/rspec-3.5.0.gem
210
+ - vendor/cache/rspec-core-3.5.2.gem
211
+ - vendor/cache/rspec-expectations-3.5.0.gem
212
+ - vendor/cache/rspec-mocks-3.5.0.gem
213
+ - vendor/cache/rspec-support-3.5.0.gem
214
+ - vendor/cache/rubocop-0.42.0.gem
215
+ - vendor/cache/ruby-enum-0.5.0.gem
216
+ - vendor/cache/ruby-progressbar-1.8.1.gem
217
+ - vendor/cache/simplecov-0.12.0.gem
218
+ - vendor/cache/simplecov-html-0.10.0.gem
219
+ - vendor/cache/slop-3.6.0.gem
220
+ - vendor/cache/thread_safe-0.3.5.gem
221
+ - vendor/cache/tzinfo-1.2.2.gem
222
+ - vendor/cache/unicode-display_width-1.0.5.gem
223
+ - word_search.gemspec
224
+ homepage: https://www.github.com/npezza93/word_searcher
225
+ licenses:
226
+ - MIT
227
+ metadata: {}
228
+ post_install_message:
229
+ rdoc_options: []
230
+ require_paths:
231
+ - lib
232
+ required_ruby_version: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - ">="
235
+ - !ruby/object:Gem::Version
236
+ version: '0'
237
+ required_rubygems_version: !ruby/object:Gem::Requirement
238
+ requirements:
239
+ - - ">="
240
+ - !ruby/object:Gem::Version
241
+ version: '0'
242
+ requirements: []
243
+ rubyforge_project:
244
+ rubygems_version: 2.5.1
245
+ signing_key:
246
+ specification_version: 4
247
+ summary: Word Search Generator and Solver
248
+ test_files: []