Adam7 es un algoritmo de entrelazado para imágenes ráster, como PNG. Se llama algoritmo "Adam7" porque fue inventado por Adam M. Costello, y se genera siguiendo un patrón determinado 7 veces. Una de las cosas interesantes sobre el algoritmo Adam7 que lo hace realmente divertido para el golf de código es que el patrón puede repetirse un número arbitrario de veces, siempre que sea extraño. En 1996, cuando PNG
se desarrolló el estándar, el uso de solo 7 iteraciones se consideraba suficiente, ya que las 9 iteraciones eran demasiado complejas y 5 iteraciones no son tan eficientes.
Aquí está la primera iteración del mosaico:
a
Bastante simple. Este es un mosaico "Adam1". Así es como llegamos a la siguiente iteración, el mosaico "Adam3".
Como nuestro último mosaico fue 1x1
, duplicamos la altura y el ancho, y el siguiente será 2x2
. Primero, comenzamos con una 'a' en la esquina superior izquierda.
a-
--
Paso 2, copie este patrón a la derecha y aumente la letra en la que estamos en uno.
ab
--
Paso 3, igual que el paso 2, pero copia en lugar de a la derecha.
ab
cc
Auge. El mosaico "Adam3". Hagamos también el "Adam5", para que pueda ver cómo funciona el algoritmo. Este mosaico será, nuevamente, el doble de grande, entonces 4x4
. Nuevamente, comenzamos con un a
en la esquina superior izquierda:
a---
----
----
----
Duplique este patrón, aumente la letra y muévala a la derecha:
a-b-
----
----
----
De nuevo, esta vez abajo.
a-b-
----
c-c-
----
De nuevo, esta vez a la derecha.
adbd
----
cdcd
----
De nuevo, esta vez abajo.
adbd
eeee
cdcd
eeee
Este es el mosaico "Adam5". Aquí está la representación ASCII del mosaico Adam7:
afdfbfdf
gggggggg
efefefef
gggggggg
cfdfcfdf
gggggggg
efefefef
gggggggg
Y mientras lo hacemos, aquí hay una animación divertida de cada paso del mosaico Adam7 (aunque hace varios mosaicos uno al lado del otro):
El reto
Dado un número impar positivo N , genera el mosaico "Adam N ". Puede usar cualquier método predeterminado de IO . Como estamos usando el alfabeto en lugar de números, solo necesita manejar entradas de hasta 25. Puede elegir generar caracteres en minúscula o mayúscula siempre que lo especifique y sea coherente.
Muestra IO
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 costumbre, este es el código de golf, por lo que se aplican las lagunas estándar, ¡y la respuesta más corta en bytes gana!
c
en el caso de prueba9
?Respuestas:
CJam, 20 bytes
Pruébalo en línea .
Alternativas de 20/21 bytes:
fuente
MATL , 23 bytes
Pruébalo en línea!
Esto utiliza el producto tensor Kronecker repetido para extender la matriz, seguido de la transposición. En cada iteración, las nuevas columnas que contienen ceros se entrelazan con las antiguas; esos ceros se reemplazan por el nuevo valor apropiado (que aumenta en cada iteración); y la matriz se transpone.
(Se perdió un byte porque el producto Kronecker de Octave no permite la entrada de caracteres. Esto se solucionará para la próxima versión).
Explicación
fuente
Perl,
11010410099918987 + 1 (-p
flag) = 88 bytesUtilizando:
Sin golf:
Ideone .
fuente
-l
bandera asigna$\
variable para que tenga el valor con código octal0141
(carácter ASCIIa
). Yl141
es más corto que$\="a";
.Pyth, 38 bytes
Pruébalo aquí!
Esperaría que esto sea fácilmente golfable.
fuente
JavaScript (ES6), 114 bytes
fuente