Você recebe como entrada uma imagem em escala de cinza. Sua tarefa é encontrar um padrão estático ou em loop no Game of Life de Conway que se assemelha à imagem de entrada o mais próximo possível.
Sua saída pode ser tanto uma imagem estática ou uma animação de looping em algum formato que podem ser convertidas em GIF. As dimensões da imagem de saída devem ser as mesmas da entrada e devem conter apenas pixels em preto e branco.
Se a saída for uma animação, cada quadro deverá ser gerado a partir do anterior, de acordo com as regras do Jogo da Vida, com uma célula por pixel. A animação deve fazer um loop, com o primeiro quadro sendo gerado a partir do último quadro pelas mesmas regras.
Se a saída for uma imagem estática, a aplicação das regras do jogo da vida deverá produzir a mesma imagem. Isso significa que nenhuma célula 'viva' pode ter mais de três ou menos que dois vizinhos 'vivos' e nenhuma célula 'morta' pode ter exatamente três vizinhos 'vivos'. (Observe que isso é basicamente o mesmo que uma animação, conforme descrito acima, mas com apenas um quadro.)
Regras e esclarecimentos extras:
Você (ou seu programa) pode escolher se as células 'vivas' são representadas como brancas e 'mortas' como pretas, ou vice-versa. Ou seja, você pode codificar isso ou seu programa pode escolher com base na imagem de entrada. (Mas deve ser o mesmo para todos os quadros da animação.)
As condições de contorno devem ser periódicas, o que significa que as células na coluna da direita têm vizinhos na coluna da esquerda, etc.
Para animações, a taxa de quadros depende de você (ou do seu programa); Eu imagino que taxas de quadros rápidas funcionem bem para aproximar pixels cinzas.
Poste pelo menos dois resultados incorporados em sua resposta. Se você pode publicar resultados de todas as imagens de entrada abaixo, é preferível.
É aceitável reduzir as imagens de teste, se necessário, para obter gifs com tamanhos de arquivo pequenos o suficiente. Se você também deseja vincular a arquivos maiores, tudo bem. Se você deseja exibir, sinta-se à vontade para encontrar alguns arquivos de origem de resolução mais alta.
Tente evitar ter muitos parâmetros controláveis em seu código - é melhor se a única entrada do seu programa for a imagem. A exceção é se você deseja ter um parâmetro para controlar o número de quadros de animação, pois isso afetará o tamanho do arquivo.
Você pode usar programas externos para alterar o formato dos arquivos de entrada e saída e / ou compilar os quadros de saída em uma animação, se desejar. (Este não é um desafio de manipulação de formato de arquivo.)
Este é um concurso de popularidade , então a resposta com mais votos vence.
Aqui está uma seleção de imagens de teste, tiradas principalmente de outras perguntas neste site. (É possível adicionar mais imagens de entrada de "bônus" posteriormente.)
Apenas para começar, aqui está uma tentativa de referência muito burra no Python 2, que tira proveito do fato de que um bloco de quatro quadrados é uma estrutura estável no Game of Life. Ele apenas redimensiona a imagem de entrada por um fator de 4 e desenha um bloco se o pixel correspondente for mais escuro que 0,5.
from skimage import io
from skimage import transform
import sys
img = io.imread(sys.argv[1],as_grey=True)
source = transform.resize(img, [i/4 for i in img.shape])
img[:]=1
for x in xrange(source.shape[0]):
for y in xrange(source.shape[1]):
if source[x,y]<0.5:
img[x*4, y*4] = 0
img[x*4+1, y*4] = 0
img[x*4, y*4+1] = 0
img[x*4+1, y*4+1] = 0
io.imsave(sys.argv[2], img)
Aqui estão algumas saídas do código de exemplo. Tenho certeza de que são possíveis resultados muito melhores.