Томислав обнови решението на 20.12.2011 23:17 (преди около 13 години)
+module GameOfLife
+ class Cell
+ attr_accessor :x, :y
+
+ def initialize(x, y)
+ @x, @y = x, y
+ end
+
+ def neighbours
+ [ [@x - 1, @y + 1], [@x, @y + 1], [@x + 1, @y + 1],
+ [@x - 1, @y], [@x + 1, @y],
+ [@x - 1, @y -1], [@x, @y - 1], [@x + 1, @y - 1] ]
+ end
+
+ def to_coords
+ return [@x, @y]
+ end
+ end
+
+ class Board
+ include Enumerable
+
+ def initialize(*args)
+ @board = []
+
+ args.each do |coords|
+ @board.push(Cell.new coords[0], coords[1])
+ end
+ end
+
+ def [](x, y)
+ @board.each do |cell|
+ return true if cell.to_coords == [x, y]
+ end
+
+ false
+ end
+
+ def stable?(cell_coords)
+ alive_neighbours(Cell.new *cell_coords) == 2 or
+ alive_neighbours(Cell.new *cell_coords) == 3
+ end
+
+ def reproduce?(cell_coords)
+ alive_neighbours(Cell.new *cell_coords) == 3
+ end
+
+ def next_generation
+ Board.new *new_cells_coords.uniq
+ end
+
+ def each
+ @board.each { |cell| yield cell.x, cell.y }
+ end
+
+ def count
+ @board.count
+ end
+
+ private
+
+ def alive_cells
+ alive_cells = []
+ @board.each do |cell|
+ alive_cells << [cell.x, cell.y]
+ end
+ alive_cells
+ end
+
+ def alive_neighbours(cell)
+ count = 0
+ cell.neighbours.each do |neighbour|
+ count += 1 if alive_cells.include? neighbour
+ end
+ count
+ end
+
+# Решението работи ако се махнат коментарите.. :(
+ def new_cells_coords
+ result = []
+# @board.each do |cell|
+# result << cell.to_coords if stable? cell.to_coords
+# cell.neighbours.select { |neighbour| reproduce? neighbour}.each { |item| result << item }
+# end
+ result
+ end
+ end
+end
Skeptic проблем? Ако смяташ, че вината е в нас, пиши на fmi@ruby.bg. Ако ли не, но не си сигурен как би могъл да решиш проблема, ела някое междучасие и ни питай.
Не смятам, че вината е във вас. Просто в последния метод не можах да преодолея ограничението.
..и ако бях коментирал и end-a за край на each все някой от тестовете можеше и да мине. :D
Другия път много внимавай какво ще правиш :)
Благодаря за направения компромис. Обещавам да внимавам повече. :)