Autômatos celulares semelhantes à vida são autômatos celulares semelhantes ao Jogo da Vida de Conway, na medida em que operam em uma grade quadrada infinitamente grande (teoricamente), onde cada célula tem exatamente 8 vizinhos e é um dos 2 estados, vivo e morto. .
No entanto, essas versões semelhantes são diferentes de maneira crucial: as regras para uma determinada célula ganhar vida e as regras para uma determinada célula sobreviver até a próxima geração.
Por exemplo, o clássico Game of Life usa a regra B3/S23
, o que significa que são necessárias 3 células vivas para gerar uma nova e 2 ou 3 vizinhos vivos para sobreviver. Para esse desafio, assumiremos que os vizinhos não se incluem, portanto cada célula tem exatamente 8 vizinhos.
Sua tarefa é, dada uma configuração inicial, uma regra de nascimento, uma regra de sobrevivência e um número inteiro positivo (o número de gerações a serem executadas), simular o autômato do tipo Life usando essas regras para o número de gerações indicado no código mais curto possível . A configuração inicial será uma matriz quadrada / matriz bidimensional ou uma sequência multilinha, você pode escolher. Os outros podem ser fornecidos em qualquer formato e método razoável.
Por exemplo, se a regra de nascimento era 12345678
(qualquer vizinho vivo), a regra de sobrevivência era 2357
e a configuração inicial era
0 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
as próximas duas gerações seriam
Generation 1: Generation 2:
0 0 0 0 0 1 1 1 1 1
0 1 1 1 0 1 1 0 1 1
0 1 0 1 0 1 0 1 0 1
0 1 1 1 0 1 1 0 1 1
0 0 0 0 0 1 1 1 1 1
Se o número de gerações dado fosse 10, o resultado seria algo parecido com o
0 1 1 1 0
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
0 1 1 1 0
Você não precisa lidar com as mudanças que ocorrem fora dos limites fornecidos pela matriz de entrada; no entanto, todas as células fora da matriz começam inoperantes. Portanto, a matriz de entrada pode ter qualquer tamanho, até o valor máximo que seu idioma pode suportar. Você não precisa produzir o quadro entre gerações.
Este é um código de golfe, portanto o código mais curto vence.
Casos de teste
Eles usam a B/S
notação para indicar as regras usadas
B2/S2
, generations = 100
configuração:
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
Resultado:
0 0 0 0 0 0 0 0
0 1 0 0 0 0 1 0
1 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
B1357/S2468
, generations = 12
configuração:
1 0 1 0 1 0
0 1 1 0 1 0
1 0 0 0 0 0
0 0 0 0 0 1
1 1 1 1 1 0
0 1 1 0 0 1
Resultado:
0 1 0 0 0 0
0 1 1 1 1 0
0 1 0 1 1 0
1 1 1 0 0 0
0 0 1 1 1 0
0 1 1 0 0 0
Se você precisar gerar mais casos de teste, poderá usar este maravilhoso simulador. Certifique-se de limitar o tamanho da placa