Adam7 ist ein Interlacing-Algorithmus für Rasterbilder wie PNG. Es wird als "Adam7" -Algorithmus bezeichnet, da es von Adam M. Costello erfunden wurde und durch siebenmaliges Folgen eines bestimmten Musters erzeugt wird. Eines der coolen Dinge am Adam7-Algorithmus, die Code-Golf wirklich Spaß machen, ist, dass das Muster beliebig oft wiederholt werden kann, solange es ungerade ist. Als 1996 der PNG
Standard entwickelt wurde, wurde die Verwendung von nur 7 Iterationen als ausreichend angesehen, da die 9 Iterationen zu komplex waren und 5 Iterationen nicht so effizient sind.
Hier ist die erste Iteration der Kachel:
a
Ziemlich einfach. Dies ist eine "Adam1" -Kachel. So kommen wir zur nächsten Iteration, der "Adam3" -Kachel.
Da unsere letzte Fliese war 1x1
, verdoppeln wir die Höhe und Breite, und die nächste wird sein 2x2
. Zuerst beginnen wir mit einem 'a' in der oberen linken Ecke.
a-
--
Schritt 2, kopieren Sie dieses Muster nach rechts und erhöhen Sie den Buchstaben, auf dem wir uns befinden, um eins.
ab
--
Schritt 3, wie Schritt 2, jedoch nach unten anstatt nach rechts kopieren.
ab
cc
Boom. Die "Adam3" -Kachel. Lassen Sie uns auch "Adam5" machen, damit Sie tatsächlich sehen können, wie der Algorithmus funktioniert. Diese Kachel wird also wieder doppelt so groß sein 4x4
. Wieder beginnen wir mit einem a
in der oberen linken Ecke:
a---
----
----
----
Verdoppeln Sie dieses Muster, erhöhen Sie den Buchstaben und verschieben Sie ihn nach rechts:
a-b-
----
----
----
Diesmal wieder runter.
a-b-
----
c-c-
----
Diesmal wieder rechts.
adbd
----
cdcd
----
Diesmal wieder runter.
adbd
eeee
cdcd
eeee
Dies ist die "Adam5" -Kachel. Hier ist die ASCII-Darstellung der Adam7-Kachel:
afdfbfdf
gggggggg
efefefef
gggggggg
cfdfcfdf
gggggggg
efefefef
gggggggg
Und während wir gerade dabei sind, finden Sie hier eine unterhaltsame Animation der einzelnen Schritte der Adam7-Kachel (obwohl mehrere Kacheln nebeneinander ausgeführt werden):
Die Herausforderung
Geben Sie bei einer positiven ungeraden Zahl N die Kachel "Adam N " aus. Sie können eine beliebige Standardmethode für E / A verwenden . Da wir das Alphabet anstelle von Zahlen verwenden, müssen Sie nur Eingaben bis zu 25 verarbeiten. Sie können wählen, ob Sie Klein- oder Großbuchstaben ausgeben möchten, solange Sie dies angeben und es konsistent ist.
Beispiel 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
Wie üblich ist dies Code-Golf, daher gelten Standardlücken, und die kürzeste Antwort in Bytes gewinnt!
c
im Testfall9
?Antworten:
CJam, 20 Bytes
Probieren Sie es online aus .
20/21-Byte-Alternativen:
quelle
MATL , 23 Bytes
Probieren Sie es online aus!
Dies verwendet ein wiederholtes Kronecker-Tensorprodukt zum Erweitern des Arrays, gefolgt von einer Transposition. Bei jeder Iteration werden neue Spalten mit Nullen mit den alten verschachtelt. Diese Nullen werden dann durch den entsprechenden neuen Wert ersetzt (der bei jeder Iteration zunimmt). und die Matrix wird transponiert.
(Ein Byte wird verschwendet, da das Kronecker-Produkt von Octave keine Char-Eingabe zulässt. Dies wird für die nächste Version behoben.)
Erläuterung
quelle
Perl,
11010410099918987 + 1 (-p
Flag) = 88 BytesVerwenden von:
Ungolfed:
Ideone .
quelle
-l
Flag weist eine$\
Variable zu, die den Wert mit Oktalcode0141
(ASCII-Zeichena
) hat. Undl141
ist kürzer als$\="a";
.Pyth, 38 Bytes
Probieren Sie es hier aus!
Ich würde erwarten, dass dies leicht golfbar ist.
quelle
JavaScript (ES6), 114 Byte
quelle