O Jogo da Vida de Conway é um processo de simulação (conhecido como autômato celular ) criado pelo matemático britânico John Conway para reproduzir, por meio de uma matriz, processos de mudança em grupos de seres vivos. As regras do jogo indicam como a matriz é modificada a cada passo. Os valores da matriz em um determinado passo são coletivamente chamados de estado do jogo.
Mais especificamente, o jogo acontece em uma matriz quadrada (ou seja, com linhas e colunas) no qual cada célula está viva (representada pelo número ) ou morta (representada pelo número ). Para simular o próximo estado do autômato, para cada célula calculamos o seu número de vizinhos vivos (duas células são consideradas vizinhas se elas são adjacentes diagonalmente, horizontalmente ou verticalmente – ou seja, uma célula pode ter até vizinhas), e decidimos se a célula estará viva ou morta no próximo estado de acordo com as seguintes regras:
Toda célula fora da matriz é considerada morta, ou seja, células fora da matriz nunca afetam a quantidade de vizinhos vivos de alguma célula. Observe que as regras são aplicadas em todas as células simultaneamente, uma vez a cada passo.
Dada uma matriz que representa o estado inicial do jogo e um inteiro positivo , sua tarefa é determinar o -ésimo estado do jogo de acordo com as regras descritas acima, ou seja, o valor de cada célula da matriz após passos do jogo.
A figura abaixo mostra um exemplo de jogo em uma matriz e seus estados para diferentes valores de . Células vivas são representadas com a cor preta e células mortas são representadas com a cor branca.
A primeira linha contém dois números inteiros, e , representando, respectivamente, o número de linhas/colunas da matriz e o número de passos a serem simulados.
As próximas
linhas contém
caracteres cada. O
-ésimo
caractere da
-ésima
linha representa o estado inicial da célula na linha
e coluna
.
Caso o caractere seja ‘0’, a célula naquela posição inicia
o jogo morta; caso o caractere seja ‘1’, a célula inicia o
jogo viva.
O seu programa deverá imprimir
linhas, cada uma contendo
caracteres. Na
-ésima
linha, o
-ésimo
caractere deve representar o
-ésimo
estado da célula na linha
e coluna
.
Caso a célula esteja morta, o caractere deve ser ‘0’; se
ela estiver viva, o caractere deve ser ‘1’.
A tarefa vale 100 pontos. Estes pontos estão distribuídos em subtarefas, cada uma com suas restrições adicionais às definidas acima.
Seu programa pode resolver corretamente todas ou algumas das subtarefas acima (elas não precisam ser resolvidas em ordem). Sua pontuação final na tarefa é a soma dos pontos de todas as subtarefas resolvidas corretamente por qualquer uma das suas submissões.
5 3
00000
01110
01000
00100
00000
01100
11000
00100
00000
00000
15 1
000010000010000
000010000010000
000011000110000
000000000000000
111001101100111
001010101010100
000011000110000
000000000000000
000011000110000
001010101010100
111001101100111
000000000000000
000011000110000
000010000010000
000010000010000
000000000000000
000110000011000
000011000110000
010010101010010
011101101101110
001010101010100
000111000111000
000000000000000
000111000111000
001010101010100
011101101101110
010010101010010
000011000110000
000110000011000
000000000000000
15 3
000010000010000
000010000010000
000011000110000
000000000000000
111001101100111
001010101010100
000011000110000
000000000000000
000011000110000
001010101010100
111001101100111
000000000000000
000011000110000
000010000010000
000010000010000
000010000010000
000010000010000
000011000110000
000000000000000
111001101100111
001010101010100
000011000110000
000000000000000
000011000110000
001010101010100
111001101100111
000000000000000
000011000110000
000010000010000
000010000010000