O Jogo da Vida e Fadiga de Stewie é bastante semelhante ao Jogo da Vida de Conway, mais famoso .
O universo do Jogo da Vida e Fadiga de Stewie (GoLF) é uma grade ortogonal bidimensional infinita de células quadradas, cada uma das quais está em um dos três estados possíveis: vivo, morto ou cansado. Cada célula interage com seus oito vizinhos, que são as células que são horizontal, vertical ou diagonalmente adjacentes. A cada etapa, ocorrem as seguintes transições:
- Qualquer célula viva com menos de dois vizinhos vivos morre, como se causada por subpopulação.
- Qualquer célula viva com dois ou três vizinhos vivos vive para a próxima geração.
- Qualquer célula viva com mais de três vizinhos vivos morre, como se por superpopulação.
- Qualquer célula morta com exatamente três vizinhos vivos se torna uma célula viva, como se fosse reprodução.
- Qualquer célula que esteja viva por duas gerações consecutivas morre, como se por fadiga. Não pode despertar para a vida novamente até a próxima geração
- Qualquer célula que esteja fora dos limites da grade de entrada está morta, como se tivesse caído de um penhasco.
Desafio:
Seu desafio é pegar uma grade de dimensões n-por-m representando o estado inicial de um GoLF e um número inteiro p , e gerar o estado do jogo após p gerações.
Regras:
- Os formatos de entrada e saída são opcionais, mas as grades de entrada / saída devem ter a mesma representação
- Você pode escolher qualquer símbolo imprimível para representar células vivas e mortas (usarei
1
para células vivas e0
células mortas). - Você pode escolher se possui 0 ou 1 indexado. Nos exemplos,
p=1
significa o estado após uma etapa. - O código mais curto em cada idioma vence
- Função interna para automação celular é permitida
Casos de teste:
Nos exemplos, incluí apenas a grade de entrada na entrada, não p . Eu forneci saídas para vários valores de p . Você deve emitir apenas a grade que acompanha uma determinada entrada p .
Input:
0 0 0 0 0
0 0 1 0 0
0 0 1 0 0
0 0 1 0 0
0 0 0 0 0
--- Output ---
p = 1
0 0 0 0 0
0 0 0 0 0
0 1 1 1 0
0 0 0 0 0
0 0 0 0 0
p = 2
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
p = 3 -> All dead
---
Input:
0 1 0 0 0 0
0 0 1 0 0 0
1 1 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
--- Output ---
p = 1
0 0 0 0 0 0
1 0 1 0 0 0
0 1 1 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
p = 2
0 0 0 0 0 0
0 0 0 0 0 0
1 0 0 0 0 0
0 1 1 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
p = 3
0 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 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
p = 4 -> All dead
Input
0 1 1 0 1 1 0
1 1 0 1 1 1 1
0 1 0 0 0 1 0
0 0 0 1 1 0 1
1 0 0 1 0 1 1
0 0 1 1 0 1 1
1 1 0 0 0 0 1
--- Output ---
p = 1
1 1 1 0 0 0 1
1 0 0 1 0 0 1
1 1 0 0 0 0 0
0 0 1 1 0 0 1
0 0 0 0 0 0 0
1 0 1 1 0 0 0
0 1 1 0 0 1 1
p = 2
1 0 0 0 0 0 0
0 0 0 0 0 0 0
1 0 0 1 0 0 0
0 1 1 0 0 0 0
0 1 0 0 0 0 0
0 0 0 0 0 0 0
0 0 1 1 0 0 0
p = 3
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 1 1 0 0 0 0
1 1 0 0 0 0 0
0 1 1 0 0 0 0
0 0 1 0 0 0 0
0 0 0 0 0 0 0
p = 4
0 0 0 0 0 0 0
0 0 0 0 0 0 0
1 1 1 0 0 0 0
1 0 0 0 0 0 0
1 0 1 0 0 0 0
0 1 1 0 0 0 0
0 0 0 0 0 0 0
p = 5
0 0 0 0 0 0 0
0 1 0 0 0 0 0
1 0 0 0 0 0 0
0 0 1 0 0 0 0
1 0 0 0 0 0 0
0 1 0 0 0 0 0
0 0 0 0 0 0 0
p = 6
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 1 0 0 0 0 0
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
p = 7
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
1 1 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
p = 8
0 0 0 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
0 1 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
p = 9 -> All dead
Sim, estou ciente de que todas as sementes iniciais não terminarão em todas as células mortas.
fonte
Respostas:
MATL ,
343025 bytes5 bytes removidos graças a uma sugestão de @CalculatorFeline !
Experimente online!
As entradas são uma matriz e um número. A matriz usa
;
como separador de linhas. As matrizes para os três casos de teste são inseridas comoExplicação
fonte
3Y6
com mais detalhes? Além disso, se o elemento do meio do kernel fosse.5
, você poderia verificar o CGOL apenas2<value<4
. Pode ajudar.5<=value<=7
. Quanto a3Y6
, é apenas um literal predefinido. Também1Y6
tem o bairro 4APL (Dyalog Classic 16.0) , 59 bytes
Experimente online! (emulado no Classic 15.0)
APL (Dyalog Unicode 16.0) , 85 bytes
Experimente online! (emulado no Unicode 15.0)
Solicita grade e, em seguida, p . Imprime a nova grade após p gerações.
Observe que isso usa a nova
⌺
primitiva (Estêncil) que não está incluída no conjunto de caracteres Clássico, portanto, uma versão mais curta e uma versão com menos bytes.Explicação a seguir…
fonte
display
função está aqui .Golly RuleLoader, 295 bytes
A grade de entrada deve ser colada, os limites estão no nome da regra (por exemplo,
5
*3
éY:P5,3
), pressione espaço para avançar.fonte
Java 8, 333 bytes
Explicação:
fonte