Drucken Sie die AdamN-Kachel

11

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 PNGStandard 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 ain 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):

Geben Sie hier die Bildbeschreibung ein

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!

James
quelle
Wo ist das cim Testfall 9?
Undichte Nonne
@KennyLau Sorry, es ist jetzt behoben.
James

Antworten:

8

CJam, 20 Bytes

Laq~{'a+_@f*\f+z}/N*

Probieren Sie es online aus .

La                      Push [[]]
  q~                    Push input n
    {           }/      For i in 0..n-1 ...
     'a+                  Add to char 'a to give current char
        _@f*              Join each row by char
            \f+           Add char to the end of each row as well
               z          Zip to transpose
                  N*    Join result by newlines

20/21-Byte-Alternativen:

Laaq~{'a+aff+:sz}/N*
Laaq~{'a+\Laf+f*z}/N*
Laq~{'a+f{_@*\+}z}/N*
Sp3000
quelle
6

MATL , 23 Bytes

97tiq:+"TFX*tXa~@wZ(!]c

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

97       % Push 97 (ASCII for 'a')
t        % Duplicate
iq:      % Take input n. Range [1 2 ... n-1]
+        % Add. Gives [98 99 ... 97+n-1] (letters to be filled)
"        % For each
  TFX*   %   Kronecker product with [1 0]. This interleaves new columns with zeros
  tXa~   %   Duplicate. Logical index for the new columns
  @wZ(   %   Assign letter to those columns
  !      %   Transpose (zip)
]        % End if
c        % Convert to chat. Implicitly display
Luis Mendo
quelle
3

Perl, 110 104 100 99 91 89 87 + 1 ( -pFlag) = 88 Bytes

#!perl -p
$==$_/2;$_=a.$/;$"=b;s/\w/$&.$"/ge,$"++,s/\n/$&.$"x2**$%.$&/ge,$"++until$=<++$%;$\=$_}{

Verwenden von:

> echo 5 | perl -pe '$==$_/2;$_=a.$/;$"=b;s/\w/$&.$"/ge,$"++,s/\n/$&.$"x2**$%.$&/ge,$"++until$=<++$%;$\=$_}{'

Ungolfed:

while (<>) {
# code above added by -p
    # $_ has input value
    # $/ = "\n" by default
    # $% = 0 by default
    my $n = $_ / 2;   # input
    my $s = "a" . $/; # "a\n"
    my $c = "b";      # "b"
    my $i = $%;       # 0
    while (++$i <= $n) {
        $s =~ s/(\w)/$1 . $c/ge;
        $c++;
        $s =~ s/(\n)/$1 . ($с x 2**$i) . $1/ge;
        $c++;
    }
    $\ = $s;
} {
# code below added by -p
    print;  # prints $_ (undef here) and $\
}

Ideone .

Denis Ibaev
quelle
Meine Güte ... was bedeutet eine so lange Flagge?
Conor O'Brien
@ CᴏɴᴏʀO'Bʀɪᴇɴ Das -lFlag weist eine $\ Variable zu, die den Wert mit Oktalcode 0141(ASCII-Zeichen a) hat. Und l141ist kürzer als $\="a";.
Denis Ibaev
Oh, wie interessant!
Conor O'Brien
1

Pyth, 38 Bytes

u:+r:jK@;tyHGb++b*^2H@;yHb6b+bKbh/Q2"a

Probieren Sie es hier aus!

Ich würde erwarten, dass dies leicht golfbar ist.

Blau
quelle
1

JavaScript (ES6), 114 Byte

f=n=>n<2?`a
`:f(n-2).replace(/./g,`$&`+(n+8).toString(36)).replace(/\n/g,`
${(n+9).toString(36).repeat(1<<n/2)}
`)
Neil
quelle
oo, rekursiv. Nett!
Conor O'Brien