MC102 - Algoritmos e Programação de Computadores
MC102 Horários Plano de
desenvolvimento
Cronograma Oferecimentos
anteriores

Jogo da Vida

Submissões no período de 06 a 12 de julho só serão computadas para alun*s em recuperação de Média dos Laboratórios.


Nesta tarefa, exercitaremos o uso estruturas multidimencionais em Python. O tema será o autômato celular Jogo da Vida proposto por John Horton Conway em 1970. John foi um matemático inglês com contribuições em áreas como teoria dos grupos finitos, teoria dos nós, teoria dos números, teoria combinatória dos jogos e teoria de códigos e que ficou mundialmente conhecido pelo autômato celular que estudaremos nesta tarefa. Ele faleceu em abril de 2020, aos 82 anos, vítima da COVID-19.


O jogo, que na verdade não tem jogadores, opera sobre um tabuleiro com células vivas e células mortas. Utilizaremos um padrão ASCII-ART em que células vivas são representadas por caracteres @ e células mortas por espaços em branco. Uma moldura com caratecteres + e - será utilizada para facilitar a visualização da delimitação dos diagramas.

+-----+
|     |
|  @  |
| @ @ |
|     |
+-----+

Na definição original, o diagrama é infinito e toda célula tem 8 vizinhos como esquematizado abaixo:

 V8  V1 V2
   \ | /
V7 - @ - V3
   / | \
 V6  V5 V4 

No nosso caso, para simplificar, consideraremos que as células adjacentes à moldura estão sempre mortas. Os estados das outras células poderão ser modificadas a partir da seguintes regras:

Todas as mortes e todos os nascimentos são calculados simultaneamente, dando origem a uma sequência de quadros, como ilustrado abaixo.

+-----------------+ +-----------------+ +-----------------+ +-----------------+ 
|                 | |                 | |                 | |                 |
|     @     @     | |                 | |                 | |     @     @     |
|     @     @     | |    @@     @@    | |    @@@   @@@    | |     @     @     |
|     @@   @@     | |     @@   @@     | |                 | |     @@   @@     |
|                 | |  @  @ @ @ @  @  | |  @    @ @    @  | |                 |
| @@@  @@ @@  @@@ | |  @@@ @@ @@ @@@  | |  @    @ @    @  | | @@@  @@ @@  @@@ |
|   @ @ @ @ @ @   | |   @ @ @ @ @ @   | |  @    @ @    @  | |   @ @ @ @ @ @   |
|     @@   @@     | |    @@@   @@@    | |    @@@   @@@    | |     @@   @@     |
|                 | |                 | |                 | |                 |
|     @@   @@     | |    @@@   @@@    | |    @@@   @@@    | |     @@   @@     |
|   @ @ @ @ @ @   | |   @ @ @ @ @ @   | |  @    @ @    @  | |   @ @ @ @ @ @   |
| @@@  @@ @@  @@@ | |  @@@ @@ @@ @@@  | |  @    @ @    @  | | @@@  @@ @@  @@@ |
|                 | |  @  @ @ @ @  @  | |  @    @ @    @  | |                 |
|     @@   @@     | |     @@   @@     | |                 | |     @@   @@     |
|     @     @     | |    @@     @@    | |    @@@   @@@    | |     @     @     |
|     @     @     | |                 | |                 | |     @     @     |
|                 | |                 | |                 | |                 |
+-----------------+ +-----------------+ +-----------------+ +-----------------+

Descrição da entrada

As primeiras linhas da entrada conterão um diagrama inicial para o jogo da vida no formato utilizado nos exemplos anteriores. A última linha conterá o número de passos a serem processados na sequência, ou seja, o número de quadros além do quadro original que você deverá apresentar na saída.

+------+
|      |
|      |
|  @@@ |
| @@@  |
|      |
|      |
+------+
1

Descrição da saída

A saída conterá uma repetição do diagrama inicial seguida do(s) quadro(s) solicitado(s). Para o exemplo acima, a saída será:

+------+
|      |
|      |
|  @@@ |
| @@@  |
|      |
|      |
+------+
+------+
|      |
|   @  |
| @  @ |
| @  @ |
|  @   |
|      |
+------+

Testes para o SuSy

Esta tarefa terá 10 testes abertos com padrões conhecidos do Jogo da Vida. Note que alguns padrões estabilizam, outros desaparecem, outros oscilam e outros se deslocam no diagrama. Veja os nove primeiros testes como exemplo na tabela abaixo. O padrão do teste 10 é mais elaborado e é o que ilustra o final da primeira seção deste enunciado. Os dois testes fechados são baseados em padrões que foram testados pelos testes abertos, mas com número diferente de quadros.

arq01.in arq02.in arq03.in arq04.in arq05.in arq06.in arq07.in arq08.in arq09.in
+----+
|    |
| @@ |
| @@ |
|    |
+----+
1
+-----+
|     |
|  @  |
| @ @ |
|  @  |
|     |
+-----+
2
+----+
|    |
| @  |
| @  |
|  @ |
|    |
+----+
2
+-----+
|     |
|  @  |
| @ @ |
|     |
+-----+
2
+------+
|      |
|      |
| @@@@ |
|      |
|      |
+------+
3
+-----+
|     |
|  @  |
|  @  |
|  @  |
|     |
+-----+
5
+------+
|      |
|      |
|  @@@ |
| @@@  |
|      |
|      |
+------+
3
+------+
|      |
| @@   |
| @@   |
|   @@ |
|   @@ |
|      |
+------+
3
+-------+
|       |
|  @    |
|   @   |
| @@@   |
|       |
|       |
|       |
+-------+
4

arq01.res arq02.res arq03.res arq04.res arq05.res arq06.res arq07.res arq08.res arq09.res
+----+
|    |
| @@ |
| @@ |
|    |
+----+
+----+
|    |
| @@ |
| @@ |
|    |
+----+
+-----+
|     |
|  @  |
| @ @ |
|  @  |
|     |
+-----+
+-----+
|     |
|  @  |
| @ @ |
|  @  |
|     |
+-----+
+-----+
|     |
|  @  |
| @ @ |
|  @  |
|     |
+-----+
+----+
|    |
| @  |
| @  |
|  @ |
|    |
+----+
+----+
|    |
|    |
| @@ |
|    |
|    |
+----+
+----+
|    |
|    |
|    |
|    |
|    |
+----+
+-----+
|     |
|  @  |
| @ @ |
|     |
+-----+
+-----+
|     |
|  @  |
|  @  |
|     |
+-----+
+-----+
|     |
|     |
|     |
|     |
+-----+
+------+
|      |
|      |
| @@@@ |
|      |
|      |
+------+
+------+
|      |
|  @@  |
|  @@  |
|  @@  |
|      |
+------+
+------+
|      |
|  @@  |
| @  @ |
|  @@  |
|      |
+------+
+------+
|      |
|  @@  |
| @  @ |
|  @@  |
|      |
+------+
+-----+
|     |
|  @  |
|  @  |
|  @  |
|     |
+-----+
+-----+
|     |
|     |
| @@@ |
|     |
|     |
+-----+
+-----+
|     |
|  @  |
|  @  |
|  @  |
|     |
+-----+
+-----+
|     |
|     |
| @@@ |
|     |
|     |
+-----+
+-----+
|     |
|  @  |
|  @  |
|  @  |
|     |
+-----+
+-----+
|     |
|     |
| @@@ |
|     |
|     |
+-----+
+------+
|      |
|      |
|  @@@ |
| @@@  |
|      |
|      |
+------+
+------+
|      |
|   @  |
| @  @ |
| @  @ |
|  @   |
|      |
+------+
+------+
|      |
|      |
|  @@@ |
| @@@  |
|      |
|      |
+------+
+------+
|      |
|   @  |
| @  @ |
| @  @ |
|  @   |
|      |
+------+
+------+
|      |
| @@   |
| @@   |
|   @@ |
|   @@ |
|      |
+------+
+------+
|      |
| @@   |
| @    |
|    @ |
|   @@ |
|      |
+------+
+------+
|      |
| @@   |
| @@   |
|   @@ |
|   @@ |
|      |
+------+
+------+
|      |
| @@   |
| @    |
|    @ |
|   @@ |
|      |
+------+
+-------+
|       |
|  @    |
|   @   |
| @@@   |
|       |
|       |
|       |
+-------+
+-------+
|       |
|       |
| @ @   |
|  @@   |
|  @    |
|       |
|       |
+-------+
+-------+
|       |
|       |
|   @   |
| @ @   |
|  @@   |
|       |
|       |
+-------+
+-------+
|       |
|       |
|  @    |
|   @@  |
|  @@   |
|       |
|       |
+-------+
+-------+
|       |
|       |
|   @   |
|    @  |
|  @@@  |
|       |
|       |
+-------+

Releia, se necessário, as instruções para fazer os testes em Testes com o SuSy.

Dicas de Python 3 para esta tarefa:

Orientações para submissão

Veja aqui a página de submissão da tarefa. O arquivo a ser submetido deve se chamar lab10.py. No link Arquivos auxiliares há um arquivo aux10.zip que contém todos os arquivos de testes abertos e seus respectivos resultados compactados.

O limite máximo será de 30 submissões. Serão considerados os resultados da última submissão.

O peso desta tarefa é 3.

O prazo final para submissão é 21/06/2020.

A nota desta tarefa é proporcional ao número de testes que executaram corretamente, desde que o código esteja coerente com o enunciado. A submissão de um código que não implementa o algoritmo requisitado, mas que exibe as saídas esperadas dos testes abertos a partir da comparação de trechos da entrada será considerada fraude e acarretará a atribuição de nota zero à média final da disciplina.