Wydrukuj kafelek AdamN

11

Adam7 to algorytm z przeplotem dla obrazów rastrowych, takich jak PNG. Nazywa się to algorytmem „Adam7”, ponieważ został wymyślony przez Adama M. Costello, i jest generowany poprzez wykonanie określonego wzorca 7 razy. Jedną z fajnych rzeczy w algorytmie Adam7, która sprawia, że ​​gra w golfa jest naprawdę przyjemna, jest to, że wzorzec można powtarzać dowolną liczbę razy, o ile jest on dziwny. W 1996 r., Kiedy opracowano PNGstandard, użycie tylko 7 iteracji było postrzegane jako wystarczające, ponieważ 9 iteracji było zbyt skomplikowanych, a 5 iteracji nie jest tak wydajnych.

Oto pierwsza iteracja kafelka:

a

Dość proste. To jest kafelek „Adam1”. Oto, w jaki sposób przechodzimy do następnej iteracji, kafelka „Adam3”.

Ponieważ nasza ostatnia płytka była 1x1, podwajamy wysokość i szerokość, a następna będzie 2x2. Najpierw zaczynamy od litery „a” w lewym górnym rogu.

a-
--

Krok 2, skopiuj ten wzór w prawo i zwiększ literę o jeden.

ab
--

Krok 3, tak samo jak krok 2, ale skopiuj w dół zamiast w prawo.

ab
cc

Bum. Kafelek „Adam3”. Zróbmy też „Adam5”, abyś mógł zobaczyć, jak działa algorytm. Ta płytka znów będzie dwukrotnie większa, więc 4x4. Ponownie zaczynamy od aw lewym górnym rogu:

a---
----
----
----

Podwój ten wzór, zwiększ literę i przesuń ją w prawo:

a-b-
----
----
----

Znowu tym razem w dół.

a-b-
----
c-c-
----

Znowu tym razem w prawo.

adbd
----
cdcd
----

Znowu tym razem w dół.

adbd
eeee
cdcd
eeee

To jest kafelek „Adam5”. Oto reprezentacja ASCII kafelka Adam7:

afdfbfdf
gggggggg
efefefef
gggggggg
cfdfcfdf
gggggggg
efefefef
gggggggg

A skoro już to robimy, oto zabawna animacja każdego kroku kafelka Adam7 (chociaż robi kilka płytek obok siebie):

wprowadź opis zdjęcia tutaj

Wyzwanie

Biorąc pod uwagę dodatnią liczbę nieparzystą N , wyślij płytkę „Adam N ”. Możesz użyć dowolnej domyślnej metody We / Wy . Ponieważ zamiast liczb używamy alfabetu, musisz obsługiwać tylko dane wejściowe o długości do 25. Możesz wybrać, aby wypisywać małe lub duże litery, o ile określisz i jest to spójne.

Próbka 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

Jak zwykle jest to gra w golfa, więc obowiązują standardowe luki i wygrywa najkrótsza odpowiedź w bajtach!

James
źródło
Gdzie jest ctestcase 9?
Leaky Nun
@KennyLau Przepraszamy, to już naprawione.
James

Odpowiedzi:

8

CJam, 20 bajtów

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

Wypróbuj online .

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

Alternatywy 20/21-bajtowe:

Laaq~{'a+aff+:sz}/N*
Laaq~{'a+\Laf+f*z}/N*
Laq~{'a+f{_@*\+}z}/N*
Sp3000
źródło
6

MATL , 23 bajty

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

Wypróbuj online!

Wykorzystuje to powtarzany produkt tensorowy Kroneckera w celu rozszerzenia tablicy, a następnie transpozycji. Przy każdej iteracji nowe kolumny zawierające zera są przeplatane ze starymi; te zera są następnie zastępowane przez odpowiednią nową wartość (która zwiększa się przy każdej iteracji); i macierz jest transponowana.

(Jeden bajt zmarnowany, ponieważ produkt Kronecker firmy Octave nie zezwala na wprowadzanie znaków. Zostanie to naprawione w następnym wydaniu).

Wyjaśnienie

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
źródło
3

Perl, 110 104 100 99 91 89 87 + 1 ( -pflaga) = 88 bajtów

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

Za pomocą:

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

Nie golfowany:

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
źródło
Boże… co oznacza tak długa flaga?
Conor O'Brien
@ CᴏɴᴏʀO'Bʀɪᴇɴ -lFlaga przypisuje $\ zmienną, aby miała wartość z kodem ósemkowym 0141(znak ASCII a). I l141jest krótszy niż $\="a";.
Denis Ibaev
Och, jak ciekawe!
Conor O'Brien
1

Pyth, 38 bajtów

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

Wypróbuj tutaj!

Spodziewałbym się, że będzie to łatwe do gry w golfa.

niebieski
źródło
1

JavaScript (ES6), 114 bajtów

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
źródło
z oo, rekurencyjne. Ładny!
Conor O'Brien