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
fonte
Respostas:
MATL ,
2423 bytesAs entradas são:
;
como separador de linhas.Experimente online! Ou veja os casos de teste: 1 , 2 .
Por mais alguns bytes, você pode ver a evolução na arte ASCII .
Explicação
fonte
xx
no início parece um desperdício pouco para mim ...Wolfram Language (Mathematica) ,
144122 bytesExperimente online!
Exemplo de uso:
usa uma grade aleatória de 10x10 como início, sobrevive com 2 ou 3 vizinhos, nasce com 3 vizinhos, obtém o resultado da plotagem em 5 iterações.
fonte
R , 256 bytes
Experimente online!
Infelizmente, isso não parece tão bom quanto eu esperava.
Entrada : uma matriz R e os parâmetros de desafio. Saída : a matriz após as gerações R.
O algoritmo preenche a matriz com zeros para manipular os limites. Em seguida, iterativamente: 1) aplica a regra de nascimento e 2) mata as células pré-existentes que não passaram na regra de sobrevivência. O estofamento é removido ao retornar.
fonte
216
que seja pelo menos um cubo ...Python 2 ,
156149146 bytesExperimente online!
Toma entrada:
R
ules:[birth,survial]
regras como lista destring
. por exemplo. (['135','246']
)g
enerações:int
c
onfiguration: matriz quadrada 2D de1/0
ouTrue/False
Retorna 2d matriz de
True/False
fonte