Cada célula de um autômato celular semelhante à vida precisa apenas de um bit para representá-lo, pois só pode estar vivo ou morto. Isso significa que existem apenas duas cores; muito chato.
Imagens normais têm 24 bits por pixel (8 em cada um dos RGB). Isso significa que, em uma imagem normal com pixels como células, você pode simular 24 jogos reais ao mesmo tempo!
Desafio
Sua tarefa é escrever um programa que aplicará uma geração das regras de um autômato celular realista a uma imagem de profundidade de 24 bits (em qualquer formato conhecido que você queira) e produzir a imagem resultante.
Cada uma das 24 camadas usará o mesmo conjunto de regras realista, estritamente dentro de sua própria camada. As 24 camadas não interagem umas com as outras.
Além disso
- Zeros são células mortas e outras são células vivas.
- As condições de contorno são periódicas (formando um toro).
- Quaisquer dimensões da imagem devem funcionar.
Entrada / Saída
Seu programa precisa receber 3 argumentos, via stdin ou linha de comando (ou o equivalente mais próximo do seu idioma):
- O nome do arquivo de imagem de entrada.
- Uma sequência de dígitos de 0 a 8 em ordem crescente que indica quando novas células nascem:
- Se o dígito d está na corda, em seguida, as células mortas ganham vida quando eles têm d vizinhos vivos.
- Exemplo:
3
é Vida normal - Células mortas com exatamente 3 vizinhos vivos ganham vida.
- Uma sequência de dígitos de 0 a 8 em ordem crescente que indica quando as células existentes sobrevivem:
- Se o dígito d estiver na cadeia, as células vivas com d vizinhos vivos sobreviverão até a próxima geração, caso contrário, elas morrerão.
- Exemplo:
23
é normal Vida - Somente células com exatamente 2 ou 3 vizinhos sobrevivem à próxima rodada.
Observe que o bairro de Moore é sempre usado. Leia isto ou isto para obter mais informações sobre o que define com precisão um autômato real e muitos conjuntos de regras interessantes.
A imagem de saída de uma geração depois deve ser exibida ou salva como out.png
( bmp
ou o que seja).
Submissão
O código mais curto em bytes vence.
Você está exigido para incluir pelo menos uma imagem de teste e suas três gerações subseqüentes imediatos para algum conjunto de regras não-trivial. Use seu avatar e as regras normais da vida se você não conseguir pensar em nada melhor.
Se você quiser, pode usar esta pistola Gosper Glider onde os únicos bits vivos estão na camada verde 128 (é certo que funcionará na vida normal):
A publicação de sequências interessantes ou mesmo animações é altamente recomendável.
fonte
Respostas:
MATLAB: 275
Meu favorito dos parâmetros que tentei é o seguinte
45678
,568
após uma desintegração gradual, resultando em um céu de estrelas cintilantes. Esta imagem descreve "a desintegração da persistência da memória".Código não produtor de gif (aceita PNG sem extensão):
Código de golfe que aceita um nome de arquivo completo (que pode ser GIF, JPEG e talvez outros itens) e grava em
out.png
:Um fato descoberto anteriormente é que os parâmetros
12
,1
podem ser utilizados para gerar um Sierpinsky tapete do tipo fractal. Aqui está um com um ponto de semente colocado aleatoriamente em cada bit:fonte
Mathematica, 359
Estou recebendo informações de solicitações de sequência de caracteres na ordem (1) regras de nascimento, (2) regras de sobrevivência, (3) nome do arquivo e estou exibindo o resultado diretamente no Mathematica.
Isso deve ser capaz de lidar com os formatos mais populares, desde que o arquivo realmente tenha profundidade de 24 bits.
Aqui está uma versão um pouco não-destruída:
Aqui estão dois exemplos usando o avatar de Rainbolt :
20 gerações usando o Game of Life padrão
[3,23]
:20 gerações usando
[456,34567]
:E aqui está um GIF das 200 primeiras gerações da última regra. O GIF pula cada terceiro quadro, porque não poderia compactá-lo abaixo de 2 MB:
fonte
Python 2, 427
Para quem não tem Mathematica;)
Ele solicita o nome do arquivo, os casos de nascimento e os casos de sobrevivência. Portanto, para as regras normais da vida, você pode inserir
test.bmp
, então3
, então23
(sem aspas ou qualquer coisa necessária).Usei a formatação de string para indexar e recombinar os bits de cor, embora eu receie que provavelmente não seja o ideal.
Note que é bem lento.
Exemplo
Alta vida e excelente arte misturam-se, certo? (Regra
36
/23
.)Original / Geração 1
Geração 2 / Geração 3
fonte
Java, 1085 bytes
Exemplos (regra 368/245):
Gen 0:
Gen 1:
Gen 2:
Gen 3:
Gen 4:
fonte