class Conwy::World::CellGrid

Public Class Methods

from_s(string) click to toggle source
# File lib/conwy/world.rb, line 20
def self.from_s(string)
  new(string.split("\n").map do |row|
    row.each_char.map do |char|
      Cell.new(alive: char == '1')
    end
  end)
end

Public Instance Methods

next() click to toggle source
# File lib/conwy/world.rb, line 36
def next
  self.class.new(map.with_index do |row, x|
    row.map.with_index do |cell, y|
      cell.next(alive_neighbors: alive_neighbors(Coordinate.new(x, y)))
    end
  end)
end
to_s() click to toggle source
# File lib/conwy/world.rb, line 28
def to_s
  map do |row|
    row.map do |cell|
      cell.alive? ? 1 : 0
    end.join
  end.join("\n")
end

Private Instance Methods

alive_neighbors(coordinate) click to toggle source
# File lib/conwy/world.rb, line 46
def alive_neighbors(coordinate)
  neighbors(coordinate).select(&:alive?).size
end
at(coordinate) click to toggle source
# File lib/conwy/world.rb, line 56
def at(coordinate)
  fetch(coordinate.x, {})[coordinate.y] unless coordinate.negative?
end
neighbors(coordinate) click to toggle source
# File lib/conwy/world.rb, line 50
def neighbors(coordinate)
  coordinate.neighbors.map do |neighbor_coordinate|
    at(neighbor_coordinate)
  end.compact
end