class WordSearch::ThreeDimensional::Plane
Attributes
z[RW]
Public Class Methods
make_from_file(file, should_catalog: true)
click to toggle source
# File lib/word_search/three_dimensional/plane.rb, line 65 def make_from_file(file, should_catalog: true) string = File.read(file).split("\n\n").map(&:split) return false unless valid_file?(string) make_word_search(string, should_catalog: should_catalog) end
new(x, y, z)
click to toggle source
# File lib/word_search/three_dimensional/plane.rb, line 9 def initialize(x, y, z) @catalog = Catalog.new @x, @y, @z = x, y, z initialize_plane do |x_point, y_point| self[x_point][y_point] = {} z.times do |z_point| self[x_point][y_point][z_point] = Point.new(x_point, y_point, z_point) end end end
Private Class Methods
add_to_catalog(plane, point, should_catalog = true)
click to toggle source
# File lib/word_search/three_dimensional/plane.rb, line 101 def add_to_catalog(plane, point, should_catalog = true) return unless should_catalog plane.catalog[point.letter] ||= [] plane.catalog[point.letter] << point end
empty_3d_plane_from_string(string)
click to toggle source
# File lib/word_search/three_dimensional/plane.rb, line 95 def empty_3d_plane_from_string(string) x = string.flat_map { |row| row.map(&:length) }.uniq.first y = string.collect(&:length).uniq.first new(x, y, string.count) end
make_word_search(string, should_catalog: true)
click to toggle source
# File lib/word_search/three_dimensional/plane.rb, line 80 def make_word_search(string, should_catalog: true) plane = empty_3d_plane_from_string(string) string.each_with_index do |slice, z| slice.reverse.each_with_index do |row, y| row.split("").each_with_index do |letter, x| plane[x][y][z] = Point.new(x, y, z, letter) add_to_catalog(plane, plane[x][y][z], should_catalog) end end end plane end
valid_file?(string)
click to toggle source
# File lib/word_search/three_dimensional/plane.rb, line 75 def valid_file?(string) string.collect(&:length).uniq.count == 1 && string.flat_map { |row| row.map(&:length) }.uniq.count == 1 end
Public Instance Methods
add_letters()
click to toggle source
Calls superclass method
WordSearch::Plane::Base#add_letters
# File lib/word_search/three_dimensional/plane.rb, line 46 def add_letters super do |x_point, y_point| z.times do |z_point| self[x_point][y_point][z_point].letter ||= random_letter end end end
directions()
click to toggle source
# File lib/word_search/three_dimensional/plane.rb, line 54 def directions @directions ||= WordSearch::ThreeDimensional::Direction end
find_next_point(point, direction)
click to toggle source
# File lib/word_search/three_dimensional/plane.rb, line 58 def find_next_point(point, direction) dig( point.x + direction[0], point.y + direction[1], point.z + direction[2] ) end
max()
click to toggle source
# File lib/word_search/three_dimensional/plane.rb, line 42 def max [x, y, z].max end
three_dimensional?()
click to toggle source
# File lib/word_search/three_dimensional/plane.rb, line 34 def three_dimensional? true end
to_s()
click to toggle source
# File lib/word_search/three_dimensional/plane.rb, line 22 def to_s (0..(z - 1)).map do |z_slice| values.map do |row| row.values.map { |ys| ys[z_slice] }.map(&:to_s) end.transpose.reverse.map(&:join).join("\n") end.join("\n\n") end
total_points()
click to toggle source
# File lib/word_search/three_dimensional/plane.rb, line 38 def total_points x * y * z end
two_dimensional?()
click to toggle source
# File lib/word_search/three_dimensional/plane.rb, line 30 def two_dimensional? false end