Eu vi um gif legal da curva de dragão gêmeo feita de um quadrado e me perguntei o que aconteceria se começássemos de outra imagem de base. Então, eu escrevi um programa para fazer isso.
É tão legal que achei que seria divertido fazer isso como um desafio.
Tarefa
Você obterá uma imagem quadrada com um comprimento de borda que é uma potência de 2 (maior que 4).
Para criar essa imagem, comece dividindo a imagem em 4 bandas verticais de tamanho igual e deslocando as bandas adjacentes em um oitavo do tamanho da imagem em direções opostas (as bandas deslocadas devem envolver o outro lado). Você deve repetir esse processo sempre que dividir a imagem em duas vezes mais divisões e mudar pela metade até a hora anterior. Cada iteração você deve alternar entre os turnos vertical e horizontal. Você deve iterar até que a mudança exija um número fracionário de pixels (isso sempre será 1/2) no ponto em que você terminou.
Ao deslocar as bandas numeradas verticalmente ímpares da esquerda (indexado a zero), deve deslocar para baixo enquanto até deslocar para cima. Ao mudar horizontalmente, as bandas numeradas ímpares do topo devem mudar para a esquerda, enquanto as bandas numeradas pares devem mudar para a direita.
Você só precisa exibir / exibir o resultado final da transformação, nem todas as etapas intermediárias, como no gif.
Isso é código-golfe, portanto, o objetivo é minimizar o tamanho do seu código-fonte, medido em bytes.
Trabalhou através do exemplo
Vou trabalhar no gif de gato mostrado na parte superior da página, quadro a quadro.
Aqui está a imagem inicial:
Esta imagem é 512 por 512 pixels. Vamos dividi-lo em 4 bandas para iniciar e mudar cada banda em 1/8 do tamanho da imagem (64 pixels) verticalmente.
Agora vamos dividi-lo em duas vezes mais bandas (8 bandas) e deslocá-lo até a metade da última vez (32 pixels). Desta vez, mudaremos horizontalmente.
Agora, mudaremos verticalmente novamente, desta vez dividindo em 16 bandas e deslocando cada banda em 16 pixels.
32 bandas, 8 pixels, deslocamento horizontal
64 bandas, 4 pixels, deslocamento vertical.
128 bandas, 2 pixels, deslocamento horizontal.
256 bandas, 1 pixel, deslocamento vertical.
Como o próximo turno exigiria que movêssemos cada banda em meio pixel, paramos nesse ponto e produzimos o resultado.
Casos de teste
Eu tenho um script de trabalho que pode criar essas imagens, então pensei em deixar vocês escolherem as imagens para os casos de teste. Então, se você tem uma imagem quadrada com uma potência de 2 de largura que você gostaria de ver se transforma em dragão. Sinta-se à vontade para enviá-lo para mim e eu o tornarei um caso de teste.
Você também deve testar uma imagem em branco ou preto sólido, para poder determinar se os pixels estão desaparecendo ou não.
fonte
**Start** by shifting one 8th of the size of the image
entãorepeat ... each time splitting the image into twice as many divisions and shifting half as far as the previous time
a primeira vez será 1/8, a segunda 1/16. o terceiro 1/32 até o número de pixels ser fracionário. Não vejo o que não está claro sobre isso.Respostas:
MATLAB, 237 bytes
Demorou um pouco de palpite, pois eu não entendi o procedimento das especificações, mas com a ajuda da imagem funcionou.
fonte
Python 2,
317313304298fonte
input()
e esperar que seja passado como uma string para obter entrada em vez deraw_input()
.Mathematica, 177 bytes
É lento e não totalmente jogado.
Esta é Lena:
Esta é Lena, a Dragão:
fonte