TP1 - Game of Life

El objetivo del trabajo práctico es implementar un simulador para el autómata celular Conway's Game of Life.

El "tablero de juego" es una malla formada por cuadrados ("células") que se extiende por el infinito en todas las direcciones. Cada célula tiene 8 células vecinas, que son las que están próximas a ella, incluidas las diagonales. Las células tienen dos estados: están "vivas" o "muertas" (o "encendidas" y "apagadas"). El estado de la malla evoluciona a lo largo de unidades de tiempo discretas (se podría decir que por turnos). El estado de todas las células se tiene en cuenta para calcular el estado de las mismas al turno siguiente. Todas las células se actualizan simultáneamente.

Las transiciones dependen del número de células vecinas vivas:

  • Una célula muerta con exactamente 3 células vecinas vivas "nace" (al turno siguiente estará viva).
  • Una célula viva con 2 ó 3 células vecinas vivas sigue viva, en otro caso muere o permanece muerta (por "soledad" o "superpoblación").

Objetivo del trabajo práctico

Se provee una implementación incompleta del Game of Life. El objetivo es completar la implementación de las funciones donde hay un return '???'. La documentación de cada función provee lo necesario para completarlas. Una vez completado, al ejecutar python3 life.py debería verse el funcionamiento del Game of Life.

Pruebas

Para saber si su implementación está funcionando correctamente deberán ejecutar el archivo life_test.py, que correrá un conjunto de pruebas automáticas y les indicará si su implementación está funcionando correctamente. Estas pruebas pueden ser de utilidad para entender cuál es el resultado esperado de cada función en diferentes casos.

Para utilizarlo, copiá el archivo life_test.py en la misma carpeta que life.py, y ejecutá:

python3 life_test.py

Nota: Las pruebas automáticas están para simplificar el desarrollo y ofrecerles un feedback rápido sobre si su código está funcionando o no. Es necesario para la entrega que las pruebas pasen, pero esto no implica que el trabajo esté aprobado. Las pruebas no contemplan todos los casos posibles.

Cada prueba es una función dentro del archivo life_test.py. Si alguna prueba falla, te recomendamos que leas el código de la prueba para ver cuál es el caso que falla y cómo solucionar el problema. La evaluación que hace cada prueba para verificar el resultado esperado se hace mediante la función assert de Python.

Restricciones y condiciones de entrega

A continuación se describen los criterios y lineamientos que deben respetarse en el desarrollo del trabajo.

  • La entrega debe pasar todas las pruebas para ser considerada como tal.
  • No se permite el uso de ninguna biblioteca externa.
  • No se permite el uso del operador de argumentos * de la forma funcion(*argumentos).
  • No se permite el uso de variables globales (sí el de constantes!).
  • No se permite el uso de eval.

Entrega

La corrección de los trabajos serán por la plataforma GitHub. Para esto será necesario crearse una cuenta de GitHub e indicarnos el usuario antes de realizar la entrega al sistema.

En total, la secuencia completa de entrega y corrección tiene los siguientes pasos:

  1. Llená el siguiente formulario para indicarnos la cuenta de GitHub. Si no tenés cuenta, te podés crear una en https://github.com/ usando el mail que quieras.
  2. Subí el archivo life.py en nuestra página de entregas.
  3. Una vez realizada la entrega te debería llegar un mail de una invitación a un repositorio privado de GitHub con tu entrega, generado por nuestro sistema. Será necesario aceptar la invitación pues la misma vence a los 7 días una vez realizada.
  4. Tu ayudante posteriormente asignado hará la corrección en este repositorio de GitHub y te lo indicará al estar disponible.

Nota: Los trabajos prácticos NO deben subirse a un repositorio público de GitHub. Una entrega de trabajo práctico accesible al público correría el riesgo de ser copiada, y bajo el régimen de cursada implicaría la desaprobación de ambos trabajos prácticos (el original y la copia).

Material