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.
- No se permite el uso de ninguna biblioteca externa.
- No se permite el uso del operador de argumentos
*
de la formafuncion(*argumentos)
. - No se permite el uso de variables globales (sí el de constantes!).
- No se permite el uso de
eval
.
Entrega
Únicamente para éste Trabajo Práctico, la entrega y su aprobación será completamente automática. La entrega se deberá hacer por el sistema de entregas de la materia. La condición de aprobación es que el corrector automático ejecute correctamente:
- Pruebas de la implementación de las funciones en
life.py
. Esto incluye las pruebas provistas enlife_test.py
, así como también pruebas adicionales que el corrector automático ejecutará para evaluar casos extra. - Linter: se verificará que el código cumpla con las reglas de estilo de Python.
- Formato: se verificará que el código esté correctamente formateado.
Tanto éste primer trabajo práctico así como los próximos se alojarán en 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 aprobación tiene los siguientes pasos:
- 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.
- Verificá que tu archivo
life.py
pase las pruebas locales, cumpla las reglas del linter y esté correctamente formateado. - Subí el archivo
life.py
en nuestra página de entregas. - Una vez realizada la entrega, el sistema correrá las pruebas automáticas y te indicará si tu entrega cumple con las condiciones o no. Esto será inmediato, así que no es necesario cerrar la página ni esperar un mail.
- Si la entrega no cumple con las condiciones, podrás corregir y reenviar la entrega las veces que sea necesario hasta que cumpla con las condiciones, siempre y cuando se entregue antes de la fecha límite. Los detalles de los problemas encontrados en la entrega serán indicados por el sistema en el momento de la entrega.
- Si la entrega cumple con las condiciones, se considerará aprobada.
- Una vez aprobada 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. En este repositorio podrás ver la entrega de este trabajo práctico y, para los trabajos posteriores, las correcciones y comentarios que tu ayudante asignado haga y que 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).