Antes de começar, esse desafio não era meu originalmente
Créditos à Universidade de Waterloo. Isto veio da Competição de Computação Canadense 2016, Problema Sênior 5. Aqui está um link clicável para o PDF do concurso:
http://cemc.uwaterloo.ca/contests/computing/2016/stage%201/seniorEn.pdf
Aqui está um link para o site:
http://cemc.uwaterloo.ca/contests/past_contests.html
Desafio
Dada uma matriz de agrupamento de dois valores constantes, determine a configuração após n
evoluções para entrada inteira positiva n
. Esses dois valores representam uma célula viva e uma célula morta. As evoluções funcionam assim:
Evolução!
Após cada iteração, uma célula estará ativa se tiver exatamente um vizinho vivo na iteração anterior. Menos ainda e morre de solidão; mais e morre de superlotação. O bairro é exclusivo: ou seja, cada célula tem dois vizinhos, não três.
Por exemplo, vamos ver como 1001011010
evoluiria, onde 1
é uma célula viva e 0
é uma célula morta.
(0) 1 0 0 1 0 1 1 0 1 0 (1)
* $ %
A célula da célula *
tem uma célula morta em ambos os lados e, portanto, morre de solidão.
A célula da célula $
possui uma célula viva de um lado e uma célula morta do outro. Torna-se vivo.
O cel no %
tem uma célula viva em ambos os lados, para que fique morto por superlotação.
Critérios Vencedores
O menor código vence.
I / O
Entrada será uma lista dos estados da célula como dois valores consistentes e um número inteiro representando o número de entradas, em algum formato razoável. A saída deve ser uma lista dos estados da célula após o número especificado de iterações.
Casos de teste
start, iterations -> end
1001011010, 1000 -> 1100001100
100101011010000, 100 -> 000110101001010
0000000101011000010000010010001111110100110100000100011111111100111101011010100010110000100111111010, 1000 -> 1001111111100010010100000100100100111010010110001011001101010111011011011100110110100000100011011001
Caso de
teste Este caso de teste congelou a haste e excedeu o limite de tamanho na pasta
Theta(nt)
onde n
está o comprimento da matriz e t
é o número de evoluções; um algoritmo mais rápido leva Theta(n lg t)
.