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
fonte
Theta(nt)
onden
está o comprimento da matriz et
é o número de evoluções; um algoritmo mais rápido levaTheta(n lg t)
.Respostas:
APL (Dyalog) , 14 bytes
Solicita o estado inicial como lista booleana e, em seguida, o número de iterações
Experimente online!
⎕
prompt numérico (para lista booleana do estado inicial)⊢
nisso, aplique(
… A)⍣⎕
seguinte função tácita, tempos de prompt numérico¯1∘⌽
o argumento girou um passo à direita≠
diferente de (XOR)1∘⌽
o argumento girou um passo à esquerdafonte
Geléia , 7 bytes
Experimente online!
Caso de teste extra (rodapé para formatação) .
Explicação
fonte
05AB1E , 6 bytes
Experimente online!
Explicação
fonte