Hoy en día estamos acostumbrados a luminosos videojuegos que emociona, excitan a los jugadores y en ocasiones incluso pueden jugarse por muchas personas al mismo tiempo en servidores dedicados a ello. Muchos videojuegos hacen énfasis en las habilidades manuales del jugador y sus reflejos, los cuales bien pueden convertirse en juegos populares e incluso adictivos.
Pero también hay juegos que caen en categorías que resultan hasta curiosas. Este es el caso del juego de, la vida de Conway, un juego de cero-personas, inventado por el matemático John Conway, cuando éste trabajaba en la Universidad de Cambridge. El juego se conoció ampliamente a partir del artículo de Martin Gardner en Scientific American, de octubre de 1970 e inmediatamente se volvió un ejercicio adictivo en cómputo.
John Conway (de amarillo) con el autor de este artículo
El juego se desarrolla en una malla cuadriculada, en donde en los casilleros de la misma (llamadas celdas), se colocan células o bien se dejan vacíos. Las reglas son sencillas, cuando hay una configuración de celdas ocupadas y vacías, se tiene que:
- Cada célula con una o sin células vecinas se muere, por soledad.
- Cada célula con cuatro o mas células vecinas mueren, por sobrepoblación.
- Cada células con dos o tres vecinas, sobrevive.
Así, el juego consiste en que el usuario genere una configuración de células y aplique las reglas mencionadas en paralelo para cada celda. Eso hará la siguiente generación, a la cual se le aplicará el mismo algoritmo. Un ejemplo del juego de la vida de Conway puede verse aquí, en donde el lector podrá generar las configuración que quiera y ver cómo evoluciona en el tiempo. En eso, de hecho, consiste el juego. No hay que interactuar de ninguna manera una vez que se ha generado una configuración de celdas.
Conway y mucha gente dedicó muchas horas al juego de la vida tratando de encontrar las propiedades de las diferentes configuraciones y se tienen conclusiones fantásticas, por ejemplo, que el juego de la vida es “Turing completo”, es decir, se puede crear una máquina de Turing que pueda hacer cualquier cálculo. Tal vez por ello la importancia de este “juego”. Cabe decir que además, Conway redujo la idea de los autómatas celulares que en un principio von Neumann había estudiado y en donde -según él- su diseño requería de 29 propiedades y reglas, a algo mucho más escueto pero igualmente poderoso.
Pues bien, el juego de la vida de Conway eventualmente fue programado infinidad de meses y se tienen reiteradas sospechas de que usó mucho “tiempo de máquina” en computadoras grandes, en aquellas máquinas que solamente las podían tener en esos tiempos las instituciones académicas y las instancias gubernamentales. Sin embargo, el juego -como ya dijimos- es mucho más que un simple juego, y quizás sea un interesante modelo teórico para desarrollar ideas en matemáticas e inclusive, en la biología.
Pues bien, considerando eso, el reto consiste en desarrollar un programa que juegue al juego de la vida de Conway. Se puede desarrollar en cualquier lenguaje y sería interesante (puntos extras), a quien lo desarrolle en algún lenguaje que no haya sido ya escrito en Rosetta Code. Es cierto que en este sitio pueden verse ya mucho código fuente que resuelve el problema pero aquí el reto es que usted lector/lectora, lo resuelva.
Para ser más claros, el juego de la vida se representa así:
Una célula C se representa por 1 cuando está viva y 0 cuando está muerta, en una matriz cuadrada de m x m casilleros o celdas. Calculamos N, la suma de las células vidas en las ocho celdas en la vecindad de cada célula C, y entonces tenemos a una célula que sobrevive o que muere en la siguiente generación basándose en lo siguiente:
- Si una célula está en 1 y tiene 0 o 1 vecino (una célula en 1), entonces en la posición de la célula se pinta un 0 (muerte por soledad).
- Si una célula está en 1 y hay una vecindad con 4, 5, 6, 7 y 8 celdas vecinas ocupadas, entonces se pinta un 0 en la siguiente generación (muerte por sobrepoblación)
- Si la célula de interés tiene un 1 y la vecindad de la misma tiene 2 o 3 células en 1, entonces sobrevive con un 1 en la siguiente generación.
- Si la célula tiene 0 en el punto de interés y hay 3 células alrededor, se pondrá un 1 en la siguiente generación (tres células dan el nacimiento de una nueva).
- Si la célula es 0 y hay 0, 1, 2, 4, 5, 6, 7, 8 entonces en la siguiente generación se pondrá un 0.
El programa a escribir debe hacerse en cualquier lenguaje que se deseé. Puede ser compilado o interpretado y tiene puntos extras si el lenguaje usado no está en las implementaciones hechas ya en el sitio de Rosetta Code. Desde luego, se puede hacer en un algún lenguaje ya usado, por ejemplo C, C#, Haskell incluso, pero si alguien me va a mandar el código le suplico que no lo copie y que busque ser original. Si detecto copia lo descalifico.
La idea es pues aprender y este es un ejercicio simple pero interesante, además de que puede ser muy útil para probar una serie de teorías al respecto de los patrones, de ciertas configuraciones, de la estabilidad de algunas de estas células, etcétera. En Conway Life hay mucha información interesante.
Al ganador (si es de la Ciudad de México), le daré una taza con el logotipo de la Morsa. Si es de otro país o de provincia, le mandaré un USB de al menos 8 GB. La razón de esto es que mandar una taza por mensajería es estúpidamente caro.
Las soluciones me las pueden mandar a [email protected].
Cabe señalar que este concurso busca simplemente alentar el trabajo de la programación y mostrar que puede ser lúdica. Es un concurso de buena fe. Si hay, por ejemplo, dos o más respuestas satisfactorias, ganará quien la haya mandado primero o que cumpla con más características que le den mejores resultados. El ganador es inapelable y cede su código fuente a la comunidad. Es decir, se promueve el código abierto.