Un tablero de casillas, cada una viva o muerta, y cuatro reglas que dicen qué pasa con ellas de una generación a la siguiente. Nadie juega: solo se mira. Y sin embargo, de esas reglas salen formas que se mueven solas por el tablero, otras que laten sin parar y hasta «pistolas» que disparan sin fin. Es el juego de la vida, que el matemático John Conway inventó en 1970, y con él se puede construir, en teoría, cualquier programa de ordenador.
Las reglas
Conway buscaba unas reglas lo más sencillas posible que dieran resultados impredecibles: ni que todo muriera enseguida ni que creciera sin control. Martin Gardner las dio a conocer en octubre de 1970, en su sección de juegos matemáticos de la revista Scientific American, y el juego se convirtió en una afición de miles de programadores, que dejaban sus ordenadores calculando generaciones por la noche. Es un autómata celular, como la hormiga de Langton: cada casilla mira a sus ocho vecinas (en horizontal, en vertical y en diagonal) y, en cada generación, todas cambian a la vez según estas reglas:
- Soledad: una casilla viva con menos de dos vecinas vivas muere.
- Supervivencia: una casilla viva con dos o tres vecinas vivas sigue viva.
- Superpoblación: una casilla viva con más de tres vecinas vivas muere.
- Nacimiento: una casilla muerta con exactamente tres vecinas vivas nace.
Dicho de forma más corta: una casilla nace con 3 vecinas y sobrevive con 2 o 3. Por eso los aficionados escriben la regla como B3/S23, de born (nace) y survives (sobrevive).
Pruébalo
La animación muestra un tablero de 112 por 64 casillas. Las que acaban de nacer salen en azul, y las que sobreviven, en azul marino. Elige un patrón para ver los más famosos, que se explican más abajo, o toca el tablero para dar vida a las casillas que quieras (con el ratón también puedes arrastrar). «Un paso» avanza una sola generación, ideal para comprobar las reglas a mano. Lo que sale del tablero sigue vivo un rato fuera de la vista y luego desaparece, como si se alejara para siempre.
Generación 0
Un zoo de patrones
En los primeros años, los aficionados se dedicaron a buscar y clasificar los patrones que aparecían. Estos son los tipos principales:
| Tipo | Qué hace | Ejemplos |
|---|---|---|
| Vidas quietas | No cambian nunca: cada casilla tiene justo las vecinas que necesita | El bloque (cuatro casillas en cuadrado), la colmena |
| Osciladores | Repiten una serie de formas, siempre en el mismo sitio | El parpadeador (tres en fila, periodo 2), el púlsar (periodo 3) |
| Naves espaciales | Recuperan su forma unas casillas más allá: se desplazan por el tablero | El planeador, que avanza una casilla en diagonal cada 4 generaciones |
| Pistolas | Se quedan en su sitio y disparan naves sin parar | La pistola de planeadores de Gosper |
| Matusalenes | Patrones pequeños que tardan muchísimo en calmarse | El R-pentominó: 5 casillas, 1,103 generaciones |
La pistola tiene su propia historia. Conway sospechaba que ningún patrón podía crecer sin límite, y ofreció 50 dólares a quien demostrara lo contrario. En noviembre de 1970, un equipo del MIT dirigido por Bill Gosper ganó el premio con una pistola que dispara un planeador cada 30 generaciones: como los planeadores se alejan para siempre, el número de casillas vivas crece sin fin. Es la que se ve al abrir la animación.
El R-pentominó, por su parte, es el ejemplo perfecto de lo difícil que es predecir el juego. Son solo cinco casillas con forma de R, pero se agitan durante 1,103 generaciones, llegan a tener 319 casillas vivas y lanzan seis planeadores, que fueron los primeros que se descubrieron. Al final quedan 116 casillas, que ya no cambian salvo los planeadores que se alejan.
Un ordenador hecho de casillas
Lo más sorprendente del juego de la vida es lo que se puede construir con él. Los planeadores pueden hacer de señales: un chorro de planeadores es una secuencia de unos y ceros, y cuando dos chorros se cruzan en el ángulo adecuado, las colisiones funcionan como puertas lógicas. Con pistolas, choques y otras piezas se pueden montar memorias, contadores y cualquier circuito. Conway y sus colegas demostraron que el juego de la vida es Turing completo: puede calcular cualquier cosa que calcule un ordenador, solo que de forma desesperadamente lenta. En el año 2000, Paul Rendell construyó dentro del juego una máquina de Turing completa, y desde entonces los aficionados han montado relojes digitales, patrones que van soltando los números primos uno a uno e incluso el propio juego de la vida simulado dentro del juego de la vida.
Esa potencia tiene un precio: como con un programa cualquiera, no hay un atajo general para saber qué hará un patrón. Para averiguar si un patrón acabará muriendo, quedándose quieto o creciendo para siempre, a menudo la única forma es simularlo generación a generación, igual que con la hormiga de Langton.
El juego de la vida en Python
Este programa guarda solo las casillas vivas, en un conjunto, así que el tablero es infinito. Para calcular la generación siguiente cuenta cuántas vecinas vivas tiene cada casilla con Counter y aplica la regla B3/S23 en una sola línea. Después comprueba que el planeador recupera su forma a las 4 generaciones y sigue al R-pentominó hasta que se calma:
from collections import Counter
def siguiente(vivas):
"""Una generación: cuenta los vecinos vivos de cada casilla y aplica las reglas."""
vecinos = Counter((x + dx, y + dy) for x, y in vivas
for dx in (-1, 0, 1) for dy in (-1, 0, 1) if dx or dy)
return {c for c, n in vecinos.items() if n == 3 or (n == 2 and c in vivas)}
def dibujo(vivas, ancho, alto):
return ["".join("█" if (x, y) in vivas else "·" for x in range(ancho)) for y in range(alto)]
# 1. El planeador: cada cuatro generaciones recupera su forma, una casilla más abajo y a la derecha
planeador = {(1, 0), (2, 1), (0, 2), (1, 2), (2, 2)}
fases = [planeador]
for _ in range(4):
fases.append(siguiente(fases[-1]))
for fila in zip(*(dibujo(f, 5, 5) for f in fases)):
print(" ".join(fila))
print("Generación 4 = generación 0 desplazada (1, 1):", fases[4] == {(x + 1, y + 1) for x, y in planeador})
print()
# 2. El R-pentominó: cinco casillas que tardan más de mil generaciones en calmarse
vivas = {(1, 0), (2, 0), (0, 1), (1, 1), (1, 2)}
poblacion = [len(vivas)]
for _ in range(1500):
vivas = siguiente(vivas)
poblacion.append(len(vivas))
for g in range(0, 1201, 200):
print(f"Generación {g:>5}: {poblacion[g]:>3} casillas vivas")
mayor = max(poblacion)
print("Máximo:", mayor, "casillas, en la generación", poblacion.index(mayor))
estable = len(poblacion) - 1
while poblacion[estable - 1] == poblacion[estable]:
estable -= 1
print("Desde la generación", estable, "la población ya no cambia:", poblacion[estable], "casillas")salida·█··· ····· ····· ····· ····· ··█·· █·█·· ··█·· ·█··· ··█·· ███·· ·██·· █·█·· ··██· ···█· ····· ·█··· ·██·· ·██·· ·███· ····· ····· ····· ····· ····· Generación 4 = generación 0 desplazada (1, 1): True Generación 0: 5 casillas vivas Generación 200: 120 casillas vivas Generación 400: 195 casillas vivas Generación 600: 213 casillas vivas Generación 800: 228 casillas vivas Generación 1000: 156 casillas vivas Generación 1200: 116 casillas vivas Máximo: 319 casillas, en la generación 821 Desde la generación 1103 la población ya no cambia: 116 casillas
La función siguiente es todo el juego: una casilla está viva en la generación siguiente si tiene 3 vecinas, o si tiene 2 y ya estaba viva. El dibujo muestra las cinco primeras generaciones del planeador: en la quinta tiene la misma forma que en la primera, una casilla más abajo y a la derecha. Y el recuento del R-pentominó confirma las cifras clásicas: un máximo de 319 casillas en la generación 821 y, desde la 1,103, siempre las mismas 116. Como no hay azar, la salida es idéntica en cada ejecución.
Por qué fascina
Conway llegó a cansarse de que lo recordaran sobre todo por este juego, cuando había hecho aportaciones importantes en teoría de grupos y teoría de números. Pero el juego de la vida sigue enganchando a programadores más de cincuenta años después, y por buenos motivos. Es fácil de programar, cabe en unas pocas líneas y es un ejercicio clásico para aprender a manejar matrices o conjuntos. Y, como la hormiga de Langton, muestra la idea de emergencia: el planeador no está escrito en ninguna de las cuatro reglas, y aun así existe, se mueve y se puede usar para calcular. Conway murió en abril de 2020, pero los aficionados siguen descubriendo patrones nuevos cada año.
Fuentes: Martin Gardner, «The fantastic combinations of John Conway’s new solitaire game «life»», Scientific American (octubre de 1970); E. Berlekamp, J. Conway y R. Guy, Winning Ways for your Mathematical Plays (1982); la página de Wikipedia sobre el juego de la vida y LifeWiki. Las cifras del R-pentominó y del planeador las hemos comprobado con el programa, ejecutado con Python 3.13. La animación y las imágenes, incluida la portada, las genera el propio algoritmo: decodigo.com.
