O Adam7 é um algoritmo de entrelaçamento para imagens rasterizadas, como PNG. Ele é chamado de algoritmo "Adam7" porque foi inventado por Adam M. Costello e é gerado seguindo um determinado padrão 7 vezes. Uma das coisas legais sobre o algoritmo Adam7 que o torna realmente divertido para o golfe com código é que o padrão pode ser repetido um número arbitrário de vezes, desde que seja estranho. Em 1996, quando o PNG
padrão foi desenvolvido, o uso de apenas 7 iterações era considerado suficiente, pois as 9 iterações eram muito complexas e as 5 iterações não eram tão eficientes.
Aqui está a primeira iteração do bloco:
a
Bem simples. Este é um bloco "Adam1". Veja como chegamos à próxima iteração, o bloco "Adam3".
Como nosso último ladrilho foi 1x1
, dobramos a altura e a largura, e o próximo será 2x2
. Primeiro, começamos com um 'a' no canto superior esquerdo.
a-
--
Etapa 2, copie esse padrão para a direita e aumente a letra em que estamos.
ab
--
Etapa 3, igual à etapa 2, mas copie para baixo em vez de para a direita.
ab
cc
Estrondo. O bloco "Adam3". Vamos fazer o "Adam5" também, para que você possa realmente ver como o algoritmo funciona. Esse ladrilho, novamente, será duas vezes maior 4x4
. Novamente, começamos com um a
no canto superior esquerdo:
a---
----
----
----
Duplique esse padrão, aumente a letra e mova-a para a direita:
a-b-
----
----
----
Mais uma vez, desta vez para baixo.
a-b-
----
c-c-
----
Mais uma vez, desta vez para a direita.
adbd
----
cdcd
----
Mais uma vez, desta vez para baixo.
adbd
eeee
cdcd
eeee
Este é o bloco "Adam5". Aqui está a representação ASCII do bloco Adam7:
afdfbfdf
gggggggg
efefefef
gggggggg
cfdfcfdf
gggggggg
efefefef
gggggggg
E enquanto estamos nisso, aqui está uma animação divertida de cada etapa do bloco Adam7 (embora ele faça vários blocos lado a lado):
O desafio
Dado um número ímpar positivo N , produza o bloco "Adam N ". Você pode usar qualquer método padrão de IO . Como estamos usando o alfabeto em vez de números, você só precisa manipular entradas de até 25. Você pode optar por gerar caracteres minúsculos ou maiúsculos, desde que você especifique e seja consistente.
IO de amostra
1:
a
3:
ab
cc
5:
adbd
eeee
cdcd
eeee
7:
afdfbfdf
gggggggg
efefefef
gggggggg
cfdfcfdf
gggggggg
efefefef
gggggggg
9:
ahfhdhfhbhfhdhfh
iiiiiiiiiiiiiiii
ghghghghghghghgh
iiiiiiiiiiiiiiii
ehfhehfhehfhehfh
iiiiiiiiiiiiiiii
ghghghghghghghgh
iiiiiiiiiiiiiiii
chfhdhfhchfhdhfh
iiiiiiiiiiiiiiii
ghghghghghghghgh
iiiiiiiiiiiiiiii
ehfhehfhehfhehfh
iiiiiiiiiiiiiiii
ghghghghghghghgh
iiiiiiiiiiiiiiii
Como de costume, esse é um código de golfe, então as brechas padrão se aplicam e a resposta mais curta em bytes ganha!
c
o testcase9
?