¿Qué te parece, Alberto? -Me pregunta mi buen amigo Descollante.
Es bonito, ¿pero qué es? -Pregunto. Se trata del Juego de la Vida -me responde Descollante.
Se trata de un autómata celular inventado por John Conway, un matemático de la Univesidad de Cambridge. Ayer estuve leyendo un antiguo artículo de Martin Gardner en Scientific American llamado "The fantastic combinations of John Conway's new solitaire game life". En él se describe un curioso juego de cero jugadores en el que una gran cantidad de células nacen y mueren según las condiciones de su entorno inmediato. En cada generación de células unas sobreviven, otras mueren y algunas nacen según unas simples reglas.
Ya veo -dije sin tener muy claro qué finalidad tenía todo aquello. ¿Y cuáles son esas reglas?
Son muy sencillas. En cada generación se evalúa cada célula:
Si una célula está viva en el instante t, morirá en el instante t+1 si menos de dos o más de tres de sus vecinas están vivas en el instante t.
Por el contrario, una célula cobrará vida en el instante t+1 si exactamente tres de sus ocho vecinas están vivas en el instante t.
Pues no parecen unas reglas muy complejas -le dije. Y veo que no has tardado en implementarlo.
Sí, estoy probando una serie de patrones que he encontrado por Internet y que son muy interesantes. Mira, acabo de construir una lanzadera de naves espaciales.
Me pareció algo bastante curioso. ¿Supongo que habrá más patrones interesantes? -pregunté
Claro, mira. Estos son otros que estoy probando.
Ver esos patrones hizo aumentar mi curiosidad, así que nos pusimos a probarlos todos. Así llevávamos un buen rato cuando empezó a hablarme de que el Juego de la Vida era algo más que un simple juego. Mi amigo comenzó a contarme cómo se había demostrado que era posible crear un ordenador a partir de puertas lógicas NAND simuladas dentro de la rejilla del juego. De hecho, era posible construir una Máquina de Turing en su interior.
Bueno Alberto, me dijo mi amigo Descollante. Te reto a buscar nuevos patrones interesantes.
Como nunca he podido resistirme a un reto informático, en cuanto llegué a casa me puse a teclear un pequeño programa en Java para representar el juego. Os dejo aquí una versión simplificada que funciona en modo texto, a modo de referencia por si queréis aventuraros a implementar una versión en modo gráfico y con más funciones. En ella se muestra un ejemplo de patrón estable que a partir de cierta generación se mantiene indefinidamente cambiando entre dos estados.
- public class JuegoVida {
- static int[][] antes = new int[12][12];
- static int[][] despues = new int[12][12];
- int i,j;
- String linea;
- antes[5][5]=1;
- antes[5][7]=1;
- antes[6][6]=1;
- antes[7][6]=1;
- antes[8][6]=1;
- while(true) {
- for (i=1 ; i<=10 ; i++) {
- for (j=1 ; j<=10 ; j++) {
- despues[i][j] = nuevoEstado(i,j);
- }
- }
- // mostrar celulas
- for (i=1 ; i<=10 ; i++) {
- linea="";
- for (j=1 ; j<=10 ; j++) {
- if (antes[i][j] == 1)
- linea += "o";
- else
- linea += ".";
- }
- }
- // copiar celulas
- for (i=1 ; i<=10 ; i++) {
- for (j=1 ; j<=10 ; j++) {
- antes[i][j] = despues[i][j];
- }
- }
- try {
- }
- }
- private static int nuevoEstado(int i, int j) {
- int vecinos;
- vecinos = antes[i-1][j-1]+antes[i][j-1]+antes[i+1][j-1];
- vecinos += antes[i-1][j]+antes[i+1][j];
- vecinos += antes[i-1][j+1]+antes[i][j+1]+antes[i+1][j+1];
- if ((vecinos == 3) && (antes[i][j] == 0))
- return 1;
- else if (((vecinos == 2) || (vecinos == 3)) && (antes[i][j]==1))
- return 1;
- else
- return 0;
- }
- }
No hay comentarios:
Publicar un comentario