class WordSearch::TwoDimensional::Plane
Public Class Methods
make_from_file(file, should_catalog: true)
click to toggle source
# File lib/word_search/two_dimensional/plane.rb, line 44 def make_from_file(file, should_catalog: true) string = File.read(file).split("\n").reverse return false if (x_len = string.collect(&:length).uniq).count > 1 || x_len.blank? make_word_search(x_len, string, should_catalog: should_catalog) end
new(x, y)
click to toggle source
# File lib/word_search/two_dimensional/plane.rb, line 6 def initialize(x, y) @catalog = Catalog.new @x, @y = x, y initialize_plane do |x_point, y_point| self[x_point][y_point] = Point.new(x_point, y_point) end end
Private Class Methods
add_to_catalog(plane, point, should_catalog = true)
click to toggle source
# File lib/word_search/two_dimensional/plane.rb, line 69 def add_to_catalog(plane, point, should_catalog = true) return unless should_catalog plane.catalog[point.letter] ||= [] plane.catalog[point.letter] << point end
make_word_search(x_len, string, should_catalog: true)
click to toggle source
# File lib/word_search/two_dimensional/plane.rb, line 55 def make_word_search(x_len, string, should_catalog: true) plane = new(x_len.first, string.count) string.each_with_index do |row, y| row.split("").each_with_index do |letter, x| add_to_catalog( plane, plane[x][y] = Point.new(x, y, letter), should_catalog ) end end plane end
Public Instance Methods
add_letters()
click to toggle source
Calls superclass method
WordSearch::Plane::Base#add_letters
# File lib/word_search/two_dimensional/plane.rb, line 21 def add_letters super do |x_point, y_point| self[x_point][y_point].letter ||= random_letter end end
directions()
click to toggle source
# File lib/word_search/two_dimensional/plane.rb, line 35 def directions @directions ||= WordSearch::TwoDimensional::Direction end
find_next_point(point, direction)
click to toggle source
# File lib/word_search/two_dimensional/plane.rb, line 39 def find_next_point(point, direction) dig(point.x + direction[0], point.y + direction[1]) end
max()
click to toggle source
# File lib/word_search/two_dimensional/plane.rb, line 31 def max [x, y].max end
to_s()
click to toggle source
# File lib/word_search/two_dimensional/plane.rb, line 15 def to_s values.map do |row| row.values.map(&:letter) end.transpose.reverse.map(&:join).join("\n") end
total_points()
click to toggle source
# File lib/word_search/two_dimensional/plane.rb, line 27 def total_points x * y end