53. Juego de la vida

Implementa el "Juego de la Vida" de Conway. Es un autómata celular donde las células en una cuadrícula rectangular evolucionan basándose en reglas simples sobre sus vecinas vivas.

Tu implementación debe:

  • Recibir un tablero inicial (matriz de booleanos o 0s/1s, donde 1 es vivo y 0 es muerto).

  • Aplicar las siguientes reglas de Conway para generar la siguiente generación:

  • Una célula viva con menos de 2 vecinas vivas, muere (subpoblación).

  • Una célula viva con 2 o 3 vecinas vivas, vive para la siguiente generación.

  • Una célula viva con más de 3 vecinas vivas, muere (sobrepoblación).

  • Una célula muerta con exactamente 3 vecinas vivas, nace.

La función debe aceptar el tablero_actual y devolver una nueva matriz representando la siguiente_generacion.

def siguiente_generacion_vida(tablero_actual: list[list[int]]) -> list[list[int]]:
    # Tu código aquí
    pass

# Ejemplo de un "Glider" inicial (patrón que se mueve)
glider_inicial = [
    [0, 1, 0],
    [0, 0, 1],
    [1, 1, 1]
]

# siguiente_generacion_vida(glider_inicial)
# -> primera generación del glider

Ratoncito

Implementa las reglas de Conway para una cuadrícula con bordes finitos (las células en los bordes tienen menos vecinos).

Dragón

Añade las siguientes mejoras:

  • Permite que el usuario elija el tamaño inicial del tablero.

  • Representa gráficamente la rejilla usando emojis o caracteres ASCII (imprimiendo cada iteración por consola).

  • Haz que la rejilla sea "esférica" o "toroidal": si estoy en los bordes, mis vecinos pertenecen a los del otro extremo de la rejilla (lo que simula un tablero sin límites).

  • Si es posible, y respetando las reglas de "no bucles" y "variables constantes", implementa un sistema para simular múltiples generaciones automáticamente hasta que el patrón se estabilice o se mueva fuera de la pantalla.

Este trabajo está bajo una licencia Attribution-NonCommercial-NoDerivatives 4.0 International.

¿Me invitas a un café?

Visitantes en tiempo real

Estás solo: 🐱