Adam7 est un algorithme d'entrelacement pour les images raster, telles que PNG. On l'appelle l'algorithme "Adam7" car il a été inventé par Adam M. Costello, et il est généré en suivant un certain schéma 7 fois. L'une des choses intéressantes de l'algorithme Adam7 qui le rend vraiment amusant pour le golf de code, c'est que le motif peut être répété un nombre arbitraire de fois, tant qu'il est impair. À l'époque de 1996, lorsque la PNG
norme a été élaborée, l'utilisation de seulement 7 itérations était considérée comme suffisante, car les 9 itérations étaient trop complexes et 5 itérations n'étaient pas aussi efficaces.
Voici la première itération de la tuile:
a
Assez simple. Il s'agit d'une tuile "Adam1". Voici comment nous arrivons à la prochaine itération, la tuile "Adam3".
Depuis notre dernière tuile 1x1
, nous doublons la hauteur et la largeur, et la suivante sera 2x2
. Tout d'abord, nous commençons par un «a» dans le coin supérieur gauche.
a-
--
Étape 2, copiez ce modèle vers la droite et augmentez la lettre sur laquelle nous sommes.
ab
--
Étape 3, identique à l'étape 2, mais copiez vers le bas au lieu de droite.
ab
cc
Boom. La tuile "Adam3". Faisons aussi le "Adam5", afin que vous puissiez réellement voir comment l'algorithme fonctionne. Cette tuile sera, encore une fois, deux fois plus grande, donc 4x4
. Encore une fois, nous commençons par un a
dans le coin supérieur gauche:
a---
----
----
----
Doublez ce motif, augmentez la lettre et déplacez-la vers la droite:
a-b-
----
----
----
Encore une fois, cette fois.
a-b-
----
c-c-
----
Encore une fois, cette fois à droite.
adbd
----
cdcd
----
Encore une fois, cette fois.
adbd
eeee
cdcd
eeee
Ceci est la tuile "Adam5". Voici la représentation ASCII de la tuile Adam7:
afdfbfdf
gggggggg
efefefef
gggggggg
cfdfcfdf
gggggggg
efefefef
gggggggg
Et pendant que nous y sommes, voici une animation amusante de chaque étape de la tuile Adam7 (bien qu'elle fasse plusieurs tuiles côte à côte):
Le défi
Étant donné un nombre impair impair N , sortez la tuile "Adam N ". Vous pouvez utiliser une méthode par défaut de IO . Étant donné que nous utilisons l'alphabet au lieu de chiffres, vous n'avez besoin de gérer que des entrées jusqu'à 25. Vous pouvez choisir de sortir des caractères en minuscules ou en majuscules tant que vous le spécifiez et qu'il est cohérent.
Exemple d'E / S
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
Comme d'habitude, il s'agit de code-golf, donc les failles standard s'appliquent et la réponse la plus courte en octets gagne!
c
dans le testcase9
?Réponses:
CJam, 20 octets
Essayez-le en ligne .
Alternatives de 20/21 octets:
la source
MATL , 23 octets
Essayez-le en ligne!
Celui-ci utilise un produit tensoriel Kronecker répété pour étendre le réseau, suivi d'une transposition. À chaque itération, de nouvelles colonnes contenant des zéros sont entrelacées avec les anciennes; ces zéros sont ensuite remplacés par la nouvelle valeur appropriée (qui augmente à chaque itération); et la matrice est transposée.
(Un octet a été gaspillé car le produit Kronecker d'Octave ne permet pas la saisie de caractères. Cela sera corrigé pour la prochaine version).
Explication
la source
Perl,
11010410099918987 + 1 (-p
pavillon) = 88 octetsEn utilisant:
Non golfé:
Ideone .
la source
-l
drapeau attribue à la$\
variable la valeur avec le code octal0141
(caractère ASCIIa
). Etl141
est plus court que$\="a";
.Pyth, 38 octets
Essayez-le ici!
Je m'attendrais à ce que ce soit facilement jouable au golf.
la source
JavaScript (ES6), 114 octets
la source