Lo que me enseñó “El juego de la vida” de Conway
To read in English, click here.
Una vez que lo leí terminé fascinada por cómo, bajo tan pocas y tan sencillas reglas, se pueden tener comportamientos de complejidad grande.
👾 El juego
Para que tengan contexto de este autómata, aquí las simples reglas:
Jugadores
Se trata de un juego de cero jugadores. Su evolución está determinada por el estado inicial y no necesita ninguna entrada de datos posterior.
Tablero
El tablero es una cuadrícula bidimensional ortogonal infinita de celdas cuadradas.
Cada celda se encuentra en uno de dos estados posibles, vivo o muerto.
Cada celda interactúa con sus ocho vecinos, que son las celdas adyacentes posicionadas horizontal, vertical o diagonalmente.
Transiciones / Estados
Con cada paso en el tiempo, ocurren las siguientes transiciones:
- Cualquier celda viva con menos de dos vecinos vivos muere, como si estuviera subpoblada.
- Cualquier celda viva con dos o tres vecinos vivos sobrevive a la siguiente generación.
- Cualquier celda viva con más de tres vecinos vivos muere, como si estuviera sobrepoblada.
- Cualquier celda muerta con exactamente tres vecinos vivos se convierte en una celda viva, como si estuviera reproduciéndose.
🤓 Mis aprendizajes
- Desarrollando el juego de la vida volví a valorar la importancia de contar con un mentor, que te guie y te avance pasos que ya recorrió. Agradezco a José Juan por animarme y guiarme en este Juego de la Vida.
- Al momento de entender el problema me tomé un tiempo en profundizar sobre esta parte de la definición del mismo: “…una cuadrícula bidimensional ortogonal infinita”. Lo que me llevó a pensar en esta propiedad; la ortoganilidad en la que cada función o característica es independiente y no afecta ni se ve afectada por otras funciones o características. Y en cómo cuidando esta propiedad podemos desarrollar software extensible, modular, reutilizable, escalable y fácil de mantener.
- Cuando comencé a pensar en la solución tuve que plantearme el estilo de diseño con el que iba a desarrollar. Opté por orientado a objetos, no porque sea el mejor, simplemente porque quería desarrollarlo en Kotlin, el lenguaje que más empleo actualmente. Esta decisión fue importante porque regiría mis decisiones en el futuro. Esta analogía la podemos aplicar en cualquier software. Es valioso realizar la etapa de diseño ya que nos dará las pautas para darle continuidad a cualquier proyecto.
- Algo que ya no puede faltar en mi código son las pruebas, y una vez más revisé su importancia desarrollando este código, ya que lo primero que realicé fue escribir mis casos de prueba e ir haciendo que funcionaran. Ya que las pruebas además de garantizar que tu código hace lo que tiene que hacer te pueden apoyar con el diseño de la solución.
👩💻 Mi código
Aquí te muestro mi código, que aunque todavía tiene varias áreas de oportunidad, me dio mucha emoción verlo correr.
Por cierto, busca el juego de la vida en Google y descubre la magia. También les comparto por aquí un video que me pareció muy emotivo, lo disfruté mucho porque representa lo que sentí resolviendo el Juego de la vida.
Si escribes tu propia versión del Juego de la vida, compártemela que estaré encantada de revisarla.
Muchas gracias por leer.
Si tienes algún comentario, sugerencia o idea, estaré feliz de leerte y colaborar para crecer juntos❤️