Szlam to wrogowie w kształcie kostki w Minecraft , którzy po zabiciu dzielą się na wiele mniejszych wersji. Na potrzeby tego wyzwania przedstawimy je jako obraz 8 × 8 pikseli w 3 kolorach:
Dokładne kolory RGB to:
0, 0, 0
dla oczu i ust110, 170, 90
dla środkowej, ciemniejszej zieleni116, 196, 96
dla zewnętrznej, jaśniejszej zieleni
Wyzwanie
Napisz program lub funkcję, która przyjmuje dodatnią liczbę całkowitą N i wyświetla obraz N rozmiarów szlamów upakowanych w prostokąt. Przechodząc od lewej do prawej, obraz powinien być zgodny z następującym wzorem:
- Stos 2 (N-1) 8 × 8 szlamów.
- Stos 2 (N-2) 16 × 16 szlamów.
- Stos 2 (N-3) szlamów 32 × 32.
- I tak dalej, aż stos zawiera tylko jeden szlam.
Obrazy szlamu większe niż wersja 8 × 8 ( ) są generowane przez upsampling najbliższego sąsiada (tj. Po prostu podwojenie wszystkich pikseli). Pamiętaj, że musisz użyć dokładnego projektu szlamu i kolorów podanych tutaj.
Końcowy obraz będzie zawierał 2 N- 1 szlam i będzie miał 2 (N + 3) -8 pikseli szerokości i 2 (N + 2) pikseli wysokości.
Obraz może być wyprowadzany w dowolnym popularnym formacie pliku obrazu, zapisany w pliku lub wydrukowany / zwrócony jako nieprzetworzony strumień danych, lub bezpośrednio wyświetlony podczas działania.
Najkrótszy kod w bajtach wygrywa.
Przykłady
Twój program powinien dać te dokładne wyniki.
N = 1:
N = 2:
N = 3:
N = 4:
N = 5:
N = 6:
Większy N powinien równie dobrze działać.
źródło
Odpowiedzi:
MATL ,
777674 bajtówKod działa w tym zatwierdzeniu , które jest wcześniejsze niż wyzwanie.
Możesz spróbować w MATL online . Ten tłumacz jest wciąż eksperymentalny. Jeśli to nie działa, spróbuj odświeżyć stronę i ponownie nacisnąć „Uruchom”.
Oto przykład uruchamiany w tłumaczu offline:
Wyjaśnienie
źródło
11
i działa. W11
rezultacie powstaje obraz 8192 × 16376. Na12
byłoby 16384 x 32760 (536 megapikseli), co wymaga ciągu 4 GB pamięci RAM, który jest więcej niż my laptop może obsłużyć.Dyalog APL,
118113 bajtów('P3',⌽∘⍴,255,∊)(3↑(116 196 96)(110 170 90))[⊃,/i{⊃⍪/⍵⍴⊂⍺⌿⍺/8 8⍴∊22923813097005 926134669613412⊤¨⍨⊂32⍴3}¨⌽i←2*⍳⎕]
zarozumiały
⎕IO=0
Z prawej do lewej:
i←2*⍳⎕
uprawnienia 1 2 4 ... 2 n-1i{ }¨⌽i
iteruj po potęgach (z⍺
) i potęgach odwróconych (⍵
)⊤¨⍨⊂32⍴3
dekodować każdą liczbę po lewej jako 32 cyfry trójskładnikowe8 8⍴∊
spłaszcz i przekształć do formatu 8 × 8⍺⌿⍺/
powtórz⍺
czasy w każdym wierszu i kolumnie⍵⍴⊂
robić⍵
kopie⊃⍪/
i układaj je pionowo⊃,/
połącz wszystkie wyniki poziomo3↑(116 196 96)(110 170 90)
zabarwienie;3↑
rozszerza je o(0 0 0)
[ ]
indeksuj kolory dla każdego elementu matrycy; wynikiem jest macierz RGB('P3',⌽∘⍴,255,∊)
to „pociąg” - funkcja, która powraca,'P3'
po której następuje odwrócony kształt argumentu255
, a argument zostaje spłaszczony.źródło
⎕IO←0
że jest to warunek poza liczbą bajtów. Wiele systemów APL używa tego domyślnie. (W tym twój LOL)JavaScript (ES7), 326
327bajtówWersja Ungolfed ES6
Spróbuj sam.
Jedyną różnicą między wersją ES7 i ES6 jest użycie
**
zamiastMath.pow()
. Możesz także zobaczyć, jak wywołać funkcję - w tym przykładzie za pomocąn=4
.Wynik
Edycje
;
Jest to dość powolne i może zająć trochę czasu dla liczb większych niż 10.
źródło
C, 220 bajtów
Dodałem bezużyteczne znaki nowego dla czytelności, wynik jest bez tych znaków.
Definiuje funkcję,
f(n)
która wyprowadza zwykły obraz PPM na standardowe wyjście.źródło
Mathematica,
267255254225212 bajtówZaoszczędzono
2942 bajtów dzięki Martinowi EnderowiSugestie dotyczące gry w golfa są mile widziane, szczególnie przy konstruowaniu tablicy 8 na 8 (na 3)
s
. Niestety nie maArrayResize
odpowiednika dla " "ImageResize
, więc tablica musi zostać przekonwertowana na image (Image
) przed zmianą rozmiaru, a następnie z powrotem na tablicę (ImageData
) w celu wykonania modyfikacjiJoin
.Nie golfowany:
źródło
b=0g
. Aby wygenerowaćs
, może być krótsze zakodowanie wartości pikseli jako liczby podstawowej-3, ale musiałbym się upewnić. W międzyczasie można zapisać bajty nie definiującb
,g
,f
,e
,t
dopóki ich potrzebują, is
nie potrzebuje nazwy w ogóle i nie robic
. Do2^(j-1)8
możesz użyć4*2^j
. Stosując je wszystkie, kończę na 225 bajtach: pastebin.com/YnkUwvwVImage
,ImageResize
,ImageData
rzeczy. Ten bit wysadza tablicę 2 razy:#&@@{##&@@{#,#}&//@x}
gdziex
jest tablica. Więc jeśli przechowujesz początkową siatkę 8x8 w zmiennejx
, a następnie robisz tox=#&@@{##&@@{#,#}&//@x}
po każdym użyciu, możesz dość łatwo generować kolejne płytki.#&[##&[#,#]&//@x]
##~Join~2
ib)f={g,a=##&[G,G,G],a,g}
, a następnie zastąpić każde dalsze występowanieG,G,G
za
tak dobrze.Python 2.7:
424412405376357 bajtówJestem trochę nowy w golfie ... proszę bardzo
bez golfa i testowane na długość ..
edit1: usunięto
sys.argv[1]
na korzyść,raw_input()
aby zapisać dodatkową instrukcję importuedit2: skrócony import PIL: usunięty
from Image
dodanoPIL.
edit3: Dzięki @ Sherlock9 za kodowanie szesnastkowe szablonu szlamu
edit4: nie potrzebował funkcji def i był używany
input()
zamiastraw_input()
źródło
'0000100001111110111211100111111102211220022112200111111000001000'
(tablica do tyłu) przekonwertowane z bazy 3 na bazę 160x2df0777ca228b9c18447a6fb
. Przy tym numerze użyj takiego kodu,[0x2df0777ca228b9c18447a6fb//3**i%3 for i in range(64)]
aby uzyskać liczby całkowite we właściwej kolejności.[0x2df0777ca228b9c18447a6fb/3**i%3for i in range(64)]
może być lepiej.0x2df0777ca228b9c18447a6fb
. To jest proste. Dla prostszego przykładu, aby uzyskać0
cyfrę th01221100
, po prostu podziel przez 30
razy, a następnie weź ostatnią cyfrę (używając mod 3), aby uzyskać0
. Aby wziąć drugą cyfrę, podziel przez 32
razy, a następnie mod 3, aby uzyskać1
. Zrozumienie listy dzieli się tylko 364
razy, aby odzyskać pełną tablicę. Jeśli masz więcej pytań, możemy omówić je na czacie PPCG .R,
378356346334 bajtówZapisuje jako plik png. Wcięte, z liniami:
N = 2: N = 3: N = 4:
Kilka wyjaśnień:
Oto macierz, która jest drukowana (0 oznacza jasnozielony, 1 ciemnozielony i 2 czarny; matryca jest przechylona, ponieważ kolumny są osi y i wiersze osi x):
Każde wywołanie
image
wykreślające tę macierz (z każdą liczbą całkowitą odpowiadającą kolorowi). Dla N = 4 tutaj jest L (matryca układu, każda niepowtarzalna liczba reprezentuje jeden pojedynczy wykres), w (szerokości kolumn macierzy) i h (wysokości rzędów macierzy):źródło