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