Aprendiendo Python, me topé con un ejercicio: Crear un Juego de la Vida. Ya escribí (poco y nada, más que nada escribí el código que utilicé para más o menos hacer algo en Python) sobre este tema, pero nunca di una pequeña introducción al tema.
Saco toda esta información de Wikipedia, por cierto.
Dicen por allá en los 70 (allá por un 8 de Junio, Onganía es derrocado por….¿los mismos militares? ¿Argentina? ¿Lógica? ¿Hola? ¿Alguien?), un matemático crea este juego y lo publica en una revista de matemáticas, como las Hombre o Maxim, pero más interesantes (de paso, notaron el patrón de las tapas de esas revistas? podemos asumir que todas las tapas contienen elementos comunes: mujeres. Adicionalmente podemos asumir una posición x, y, z “similar” entre esos elementos: mostrando el culo, pero adicionalmente, casi siempre están en la misma posición x,y,z. Cada vez menos originalidad hasta para eso tenemos. Estos son tiempos tristes).
Luego de eso, genera un interes muy grande. Principalmente porque es un juego, y a los matemáticos les gustan los juegos. Y los desafíos (tanto como los culos visibles en revistas previamente mencionadas)
Lo interesante del asunto es que es un juego sin jugadores. Esto es: Solo se necesita el “estado” inicial, y luego listo, no se necesita más información (si te ponés pelotudo, seguramente podes decir “ah, pero -alguien- tiene que poner el estado inicial! hay jugadores!. Bueno, son las 03:10 am. y puedo decirte libremente que fuck-you.) No tiene nada que ver con que los matemáticos sean solitarios ni cartas blancas (cuack).
Existe un tablero de juego que, en el juego original, tenía proporciones infinitas (para ser menos complicado, ya vamos a ver por qué). En el mismo, se colocaban células (el juego tiene mucho que ver con lo que se denomina autómata celular) que, dado un estado inicial (el que no se pone solo, pero no hay jugadores, les juro), siguen unas sencillas reglas que hacen del juego algo totalmente maravilloso para observar.
El tablero, está dividido en celdas (como un tablero de ajedrez), y en cada celda puede haber (o no) una solo una célula (o pieza, como te guste).
Ahora bien, en ese tablero, puede haber células. En la celda donde se encuentre una célula, se tomará a esa celda como “viva”, mientras donde no haya una célula, esa celda será considerada “muerta”. El juego pierde la gracia cuando todas las celdas están muertas. La muerte no es divertida
Ahora, entenderlo es bastante sencillo. Uno solo tiene que establecer ese estado al principio y sentarse en su sillón / amante preferido. La ciencia hace el resto del trabajo
Las reglas base del juego de la vida (digo base porque después se fueron agregando más) son:
- Regla de Nacimiento:
- Una célula muerta resucita si tiene exactamente TRES vecinos vivos.
- Regla de la Supervivencia:
- Una célula viva permanece viva si tiene DOS o TRES vecinos
- Regla de la Superpoblación:
- Una célula muere o permanece muerta si tiene CUATRO o MÁS vecinos
- Regla del asilamiento:
- Una célula muere o permanece muerta si tiene MENOS de DOS vecinos
¿Vecinos? Si. Vecinos. ¿Vieron que antes dije que el juego estaba en un tablero con celdas? Supongamos que estamos analizando la celda que está en (4,4) (eso es una celda dentro de una matriz…o tablero, si querés llamarlo mas humanamente. El primer 4 indica que fila y el otro número que columna. Gente loca usa esto al revés. Pero yo soy normal, lo juro. Todos los chicos cool usan este sistema). Esa celda está (por si no leíste lo que staba entre paréntesis antes) en la fila 4 y la columna 4. ¿Dónde están los vecinos?. Bueno, suponiendo que nos basamos en el Wikicionario :
- Habitante cercano, persona que vive en la casa de al lado
Podemos entonces entender que un vecino es, en este caso, todas las celdas próximas a la celda evaluada (me siento estúpido explicando esto. ¿Maté un pájaro con un misil?).
Entonces, podemos decir que cada celda, suponiendo que el tablero es infinito, tiene ocho vecinos, los cuales pueden estar vivos o muertos.
Suponiendo que me expliqué mas o menos de manera coherente con el tema de la celda (4,4), miren que lindo dibujé:
(3,3) (3,4) (3,5)
\ | /
(4,3) (4,4) (4,5)
/ | \
(5,3) (5,4) (5,5)
Siendo la celda (4,4) la que se está evaluando, tiene ocho vecinos, los cuales son, de izquierda superior a derecha inferior
- (3,3)
- (3,4)
- (3,5)
- (4,3)
- (4,5)
- (5,3)
- (5,4)
- (5,5)
Ok, ahí tenemos todos los vecinos. Pero supongamos que no estamos evaluando el punto (4,4), sinó un (800,100), o algún número así de grande (no me estoy señalando nada al decir “así”). Es interesante usar esto de las letras en las matemáticas. Por si no notáste en los 8 renglones que desperdicié ennumerando los vecinos, podemos pasar todos los números a letras. Siendo esto mucho mas claro (y más sexy) para la comprensión.
Supongamos que en vez de decir (4,4), decimos (F,C), donde F es la variable que va a contener el número de FILAS, y C es la variable que va a contener el número de COLUMNAS. Supongamos que ahora no sabemos cuales son estos valores. El coso lindo que dibu-escribí antes, quedaría algo así
(F-1,C-1) (F-1,C) (F-1,C+1)
\ | /
(F,C-1) (F,C) (F,C+1)
/ | \
(F+1,C-1) (F+1,C) (F+1,C+1)
Sexy. Como tódo lo lógico. De esta manera sin números. Se puede contemplar mejor, y además, además, ya tenés todo hecho para cuando tengas que programar todo eso. Me encanta.
OK. Perfecto. Ya tenemos las reglas y el tablero, ahora…a ponerle un poco de vida.
Teniendo esas reglas en mente, podemos empezar a poner situaciones iniciales. Gente claramente más inteligente que yo creo patrones, formas que pueden estabilizarce y quedarse indefinidamente “como están” sin modificaciones (a menos que sean alteradas por otra forma). Estas son las Still Lifes
Este cubo es el ejemplo “clásico”. Algo totalmente estático (como verán, todas las celdas cumplen con la Regla de Supervivencia) y “estabilizado”, me atrevo a decir. Gente claramente más inteligente que yo y el que encontró este patrón encontró más patrones. Dígale NO a la Lucha de Clases
Realmente en el juego de la vida pueden pasar cosas muy divertidas, como por ejemplo este tablero, que se llama “Gospers Glider Gun”. Wow.
Me olvidaba algo importante. El tema de las generaciones. Cada generación es…cada “turno de juego”, la primera generación (la 0) comienza con la configuración inicial, se aplican las reglas…y se muestra la generación siguiente. Así hasta el infinito o hasta que no haya mas celdas vivas. Como verán, la Muerte sigue cortando el mambo.
Hasta acá viene bien. Pero ahora falta la parte Pythonera del asunto.
Sigo mañana, ya son casi las 5 y no dormí nada. Maldita Leche chocolatada.
Archivado bajo: Ciencia y Tecnología, Educación, Programación | Etiquetado: desafío, game of life, juego de la vida, jujego, matemáticas, math, Programación, python







