Game of Life de Conway

Resumen

En la Academia de Codurance utilizamos esta kata en la fase de diseño, ya que resolver este ejercicio te obliga a reforzar los principios del diseño orientado a objetos y también te enseña a trabajar paso a paso.

La solución de esta kata requiere que mantengas una lógica de estado compleja. También te enseñará cómo un buen diseño orientado a objetos puede ayudarte a conseguir una solución.

Baby Steps

La percepción de que el TDD consume más tiempo que codificar una implementación, o escribir código y retro-adaptar las pruebas unitarias después del hecho, es una gran falacia. Esto sólo es cierto para quienes son nuevos a este método. Los expertos en TDD no suelen ser más lentos que quienes escriben código sin pruebas. También suelen pasar mucho menos tiempo depurando y solucionando problemas a posteriori.

Ir paso a paso es la forma ideal de practicar TDD. Una vez que seas competente en esto, podrás progresar incrementalmente hacia la solución de un problema. Te sorprenderá lo rápido y eficiente que es este proceso una vez que lo dominas.

Instrucciones

Implementa una versión finita del Juego de la Vida de Conway.

Estas son las reglas (cortesía de Wikipedia):

El universo de Game of Life es una cuadrícula ortogonal, bidimensional e infinita de células cuadradas, cada una de las cuales se encuentra en uno de los dos estados posibles: viva o muerta. Cada célula interactúa con sus ocho vecinas, que son las célula que están horizontal, vertical o diagonalmente adyacentes a ella. En cada paso del tiempo se producen las siguientes transiciones:

  • Cualquier célula viva con menos de dos vecinas vivas muere, como si la causa fuera la infrapoblación.
  • Cualquier célula viva con dos o tres vecinas vivas pasa a la siguiente generación.
  • Cualquier célula viva con más de tres vecinas vivas muere, como por sobrepoblación.
  • Cualquier célula muerta con exactamente tres vecinas vivas se convierte en una célula viva, como por reproducción.

El patrón inicial constituye la semilla del sistema. La primera generación se crea aplicando las reglas mencionadas simultáneamente a cada célula de la semilla: los nacimientos y las muertes se producen simultáneamente, y el momento determinado en que esto ocurre se denomina tick (en pocas palabras, cada generación es una función pura de la anterior).

Tu juego debe ser construido con el estado inicial de una matriz bidimensional de valores booleanos y un único método público para pasar a la siguiente generación:

public class GameOfLife {
public GameOfLife(boolean[][] board);
public void nextGen();
}

Observaciones

  • Las dimensiones de la matriz permanecen constantes durante todo el juego: el "universo" nunca crece.
  • Las células fuera de los límites de la matriz deben considerarse permanentemente muertas (nunca vuelven a la vida).

Crédito: Kata-Log

Artículos

Soluciones