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 PNG
standard, 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 a
w 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):
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!
c
testcase9
?Odpowiedzi:
CJam, 20 bajtów
Wypróbuj online .
Alternatywy 20/21-bajtowe:
źródło
MATL , 23 bajty
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
źródło
Perl,
11010410099918987 + 1 (-p
flaga) = 88 bajtówZa pomocą:
Nie golfowany:
Ideone .
źródło
-l
Flaga przypisuje$\
zmienną, aby miała wartość z kodem ósemkowym0141
(znak ASCIIa
). Il141
jest krótszy niż$\="a";
.Pyth, 38 bajtów
Wypróbuj tutaj!
Spodziewałbym się, że będzie to łatwe do gry w golfa.
źródło
JavaScript (ES6), 114 bajtów
źródło