Sólo por diversión. El Juego de la Vida de John Conway

Primary tabs

This is the translation of the original article.

Hace algunas semanas estaba leyendo un libro de Stephen Hawking y Leonard Mlodinow, El Gran Diseño. En un momento dado, intentando definir cosas como ¿por qué existimos?, ¿por qué utilizamos los modelos que utilizamos en física?,... bueno, ya sabéis, ese tipo de cosas... los autores se refirieron al ejemplo del Juego de la Vida inventado por el matemático John Coward en 1970... Básicamente el quería mostrar que un sistema con unas leyes fundamentales realmente simples (Física) podría evolucionar y "vivir" hasta convertirse en un sistema más complejo (Química) en el cual "algo" (humanos) podría descubrir su propio modelo y reglas complejas que explicasen su realidad... las reglas para este modelo determinista que el expuso eran tan básicas que pensé que sería divertido implementarlas en ObjectScript cuando tuviera un rato libre... hay otras implementaciones en JavaScript y en otros lenguajes... pero no en ObjectScript… y ¡!había que corregir eso!!… así que ¡aquí lo tienes!

Aquí tenéis un link a la clase que simula El Juego de la Vida (OPNLib.Game.ConwayLifeGame). Simplemente cárgala, compílala y ejecuta el método Test() desde tu terminal y verás como todo un mundo lleno de vida crece y evoluciona delante de tus ojos. Internamente crea una matriz utilizando globals, donde cada nodo de nivel 1 es una fila en la cual tendremos una cadena de bits tan larga como el número de columnas de la matriz que queremos representar. Cada bit tendrá el valor de la celda: vivo (1), muerto (0)... pero tienes más detalles en el documento y en la propia clase en GitHub.

Antes de nada, edita la configuración de tu terminal para permitir más columnas (~132 o más) y filas (~48 o más).

Si quieres establecer un punto de partida distinto puedes hacerlo. Simplemente llama al método Test() pasándole un objeto JSON como parámetro. Dentro de la clase encontrarás más información, pero, por ejemplo, podrías hacer:

set pTest = {
              "ID":1,
              "From":0, "To":200,  
              "Iterations":200,
              "InitialConfig":5,
              "Rows":80, "Columns":150, "Vector0":"1,1", "VectorN":"120,47",
              "AliveChar": ($c(4)), "DeadChar":"-"

}
do ##class(OPNLib.Game.ConwayLifeGame).Test(pTest)

 

Y así, puedes jugar con InitialConfig, cambiar su valor de 1 a 5, para cambiar el estado inicial del universo... 

Random - no predefined patterns - 0   

Hay documentación adicional en GitHub.

¡Que lo disfrutes!