mxhold/lifelike

View on GitHub
lib/lifelike/lifelike_cellular_automaton/cell.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Lifelike
  class LifelikeCellularAutomaton
    class Cell
      def initialize(alive, rules)
        @alive = alive
        @rules = rules
      end

      def alive?
        @alive
      end

      def tick(neighbors)
        @neighbors = neighbors
        self.class.new(alive_next?, @rules)
      end

      private

      def alive_next?
        if alive?
          @rules.survives?(alive_neighbor_count)
        else
          @rules.born?(alive_neighbor_count)
        end
      end

      def alive_neighbor_count
        @neighbors.select(&:alive?).size
      end
    end
  end
end