Wprowadzenie
The Dragon Curve jest krzywa fraktalna, który pojawia się w szczególności na stronach tytułowych odcinek powieści Park Jurajski.
Można to bardzo prosto opisać jako proces składania paska papieru, jak wyjaśniono w artykule Wikipedii na temat tej krzywej.
Kilka pierwszych iteracji generacji tej krzywej wygląda tak (napisy dla Wikipedii za obraz):
Wyzwanie
Napisz program lub funkcję, która podając liczbę całkowitą n jako dane wejściowe, generuje n-tą iterację krzywej smoka jako grafikę ASCII, używając tylko symboli _
i|
- Trzeba wyjściu postać używając tylko
|
,_
i spacji. Nie możesz wyprowadzać krzywej jako wykresu ani niczego innego. - Możesz wziąć dane wejściowe jako argument programu, w STDIN lub jako parametr funkcji.
- Dane wejściowe zawsze będą liczbą całkowitą> = 0. Twój program powinien działać dla rozsądnych wartości danych wejściowych, przy czym 12 jest najwyższą w oferowanych przypadkach testowych.
Pierwsze iteracje będą wyglądać tak
Iteracja 0 to
_
Iteracja 1 jest
_|
Iteracja 2 jest
|_ _|
Jedna linia końcowa na końcu jest w porządku. Żadne końcowe spacje nie są dozwolone, oprócz wypełnienia linii do znaku znajdującego się najbardziej na prawo na krzywej
Żadnych standardowych nadużyć związanych z lukami, jak zwykle
Przypadki testowe
- Wkład
0
Wydajność
_
- Wkład
3
Wydajność
_
|_| |_
_|
- Wkład
5
Wydajność
_ _
|_|_| |_
_ _| _|
|_|_|_
|_|_|
|_
_|
|_|
- Wkład
10
Wydajność
_ _
_|_| _|_|
|_|_ _|_|_ _
_|_|_| |_| |_|_|
_ |_|_|_ |_
_|_| _| |_| _|
|_|_ _|_ |_|
_|_|_|_|_|_
|_| |_|_|_|_|_
_|_|_| |_|
|_| |_
_|_ _ _ _ _ _ _
_ |_|_|_|_|_|_|_ |_|_|_|_ |_|_|_|_
_|_| _|_|_|_|_| |_| _ _|_| |_| _ _|_| |_|
|_|_ _|_|_|_|_|_ |_|_|_|_ |_|_|_|_
_|_|_|_|_|_|_|_|_|_ _ _|_|_|_|_ _ _|_|_|_|_ _ _
|_| |_|_|_| |_|_|_| |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_
_|_| _|_| _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|
|_| |_| |_| |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_
_|_|_|_|_|_|_|_|_|_|_| |_| |_|_|_|_
_ |_|_|_|_|_|_|_|_|_|_|_ |_|_|_|_
_|_| _|_|_|_|_|_|_|_|_| |_| _ _|_| |_|
|_|_ _|_|_|_|_|_|_|_|_|_ |_|_|_|_
_|_|_|_|_|_|_|_|_|_|_|_|_|_ |_| |_|
|_| |_|_|_| |_|_|_| |_|_|_|_|_
_|_| _|_| _|_|_| |_|
|_| |_| |_| |_
_|_ _ _
_ |_|_|_|_|_|_|_
_|_| _|_|_|_|_| |_|
|_|_ _|_|_|_|_|_
_|_|_|_|_|_|_|_|_|_ _ _
|_| |_|_|_|_|_|_|_|_|_|_|_|_|_
_|_|_|_|_|_|_|_|_|_|_| |_|
|_| |_|_|_|_|_|_|_|_|_
_ _ _|_|_| |_| |_|_|_|_
|_|_| |_ _ |_|_|_ |_|_|_|_
_ _| _| _|_| _| |_| _ _|_| |_|
|_|_|_ |_|_ _|_ |_|_|_|_
|_|_| _|_|_|_|_|_ |_| |_|
|_ _ _ |_|_|_|_|_|_|_
_ _|_|_| _|_| _|_|_|_|_| |_|
|_|_|_|_|_ _|_|_ _|_|_|_|_|_
|_| |_| |_|_|_|_|_| |_| |_|_|_|_
|_|_|_|_ |_|_|_|_
_ _|_| |_| _ _|_| |_|
|_|_|_|_ |_|_|_|_
|_| |_| |_| |_|
- Wkład
12
Wydajność
_ _ _ _ _ _ _ _
|_|_|_|_ |_|_|_|_ |_|_|_|_ |_|_|_|_
_ _|_| |_| _ _|_| |_| _ _|_| |_| _ _|_| |_|
|_|_|_|_ |_|_|_|_ |_|_|_|_ |_|_|_|_
|_|_|_|_ _ _|_|_|_|_ _ _ |_|_|_|_ _ _|_|_|_|_ _ _
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_
_ _|_|_|_|_|_|_|_|_|_|_|_|_|_| |_| _ _|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_
_ _ |_|_|_|_|_|_|_|_|_| |_| |_|_|_|_ _ _ |_|_|_|_|_|_|_|_|_| |_| |_|_|_|_
|_|_|_|_ |_|_|_|_|_|_|_|_ |_|_|_|_ |_|_|_|_ |_|_|_|_|_|_|_|_ |_|_|_|_
_ _|_| |_| _ _|_|_|_|_|_| |_| _ _|_| |_| _ _|_| |_| _ _|_|_|_|_|_| |_| _ _|_| |_|
|_|_|_|_ |_|_|_|_|_|_|_|_ |_|_|_|_ |_|_|_|_ |_|_|_|_|_|_|_|_ |_|_|_|_
|_|_|_|_ _ _|_|_|_|_|_|_|_|_ |_| |_| |_|_|_|_ _ _|_|_|_|_|_|_|_|_ |_| |_|
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_
_ _|_|_|_|_|_|_|_|_|_|_|_|_|_| |_| _ _|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_
|_| |_| |_|_|_|_|_|_|_|_|_|_|_|_ _ _ _ _ |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ _ _ _ _ _ _
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ |_|_|_|_ |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ |_|_|_|_ |_|_|_|_
_ _|_|_|_|_|_|_|_|_|_|_|_|_|_| |_| _ _|_| |_| _ _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| |_| _ _|_| |_| _ _|_| |_|
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ |_|_|_|_ |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ |_|_|_|_ |_|_|_|_
|_| |_| |_|_|_|_|_|_|_|_|_|_|_|_ _ _|_|_|_|_ _ _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ _ _|_|_|_|_ _ _|_|_|_|_ _ _
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|_|_| |_|_|_|_|_|_|_|_|_|_|_| |_|_|_| |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_
_ _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| _|_| _|_|_|_|_|_|_|_|_|_| _|_| _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ |_| |_| |_|_|_|_|_|_|_|_ |_| |_| |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_
_ _ |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| _|_|_|_|_|_|_|_| _|_|_|_|_|_|_|_|_|_|_| |_| |_|_|_|_
|_|_|_|_ |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|_ _ |_|_|_|_|_| |_|_ _ |_|_|_|_|_|_|_|_|_|_|_ |_|_|_|_
_ _|_| |_| _ _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| _|_| _|_| _|_|_|_| _|_| _|_| _|_|_|_|_|_|_|_|_| |_| _ _|_| |_|
|_|_|_|_ |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ |_| |_|_ _|_|_|_|_ |_| |_|_ _|_|_|_|_|_|_|_|_|_ |_|_|_|_
|_|_|_|_ _ _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| _|_|_|_|_|_|_|_| _|_|_|_|_|_|_|_|_|_|_|_|_|_ |_| |_|
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ _ |_| |_|_|_| |_|_ |_| |_|_|_| |_|_|_| |_|_|_|_|_
_ _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| _|_| _|_| _|_| _|_| _|_|_| |_|
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ _ |_| |_| |_| |_| |_| |_
|_| |_| |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| _|_ _ _
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|_ _ |_|_|_|_|_|_|_
_ _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| _|_| _|_| _|_|_|_|_| |_|
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ |_| |_|_ _|_|_|_|_|_
|_| |_| |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| _|_|_|_|_|_|_|_|_|_ _ _
_ _ |_|_|_|_|_|_| |_|_|_| |_|_|_|_|_|_ _ |_| |_|_|_|_|_|_|_|_|_|_|_|_|_
_|_| _|_| _ _|_|_|_|_| _|_| _|_|_|_|_|_|_|_| _|_|_|_|_|_|_|_|_|_|_| |_|
|_|_ _|_|_ _ |_|_|_|_|_|_|_ |_| |_| |_|_|_|_|_|_ _ |_| |_|_|_|_|_|_|_|_|_
_|_|_| |_| |_|_| _ _ |_|_|_|_|_|_| _|_|_|_|_|_|_|_| _ _ _|_|_| |_| |_|_|_|_
_ |_|_|_ |_ |_|_|_|_ |_|_| |_|_ _ |_|_|_|_|_| |_|_ |_|_| |_ _ |_|_|_ |_|_|_|_
_|_| _| |_| _| _ _|_| |_| _ _| _|_| _|_| _|_|_|_| _|_| _ _| _| _|_| _| |_| _ _|_| |_|
|_|_ _|_ |_| |_|_|_|_ |_|_|_ |_| |_|_ _|_|_|_|_ |_| |_|_|_ |_|_ _|_ |_|_|_|_
_|_|_|_|_|_ |_|_|_|_ _ _|_|_| _|_|_|_|_|_|_|_| |_|_| _|_|_|_|_|_ |_| |_|
|_| |_|_|_|_|_ |_|_|_|_|_|_|_|_|_ _ |_| |_|_|_| |_|_ |_ _ _ |_|_|_|_|_|_|_
_|_|_| |_| _ _|_|_|_|_|_|_|_|_|_|_| _|_| _|_| _ _|_|_| _|_| _|_|_|_|_| |_|
|_| |_ |_|_|_|_|_|_|_|_|_|_|_|_|_ _ |_| |_| |_|_|_|_|_ _|_|_ _|_|_|_|_|_
_|_ _ _ _ _ |_|_|_|_|_|_|_|_|_|_|_|_|_|_| |_| |_| |_|_|_|_|_| |_| |_|_|_|_
_ |_|_|_|_|_|_|_ |_|_|_|_ |_|_|_|_|_|_|_|_|_|_| |_|_ |_|_|_|_ |_|_|_|_
_|_| _|_|_|_|_| |_| _ _|_| |_| _ _|_|_|_|_|_|_|_|_| _|_| _ _|_| |_| _ _|_| |_|
|_|_ _|_|_|_|_|_ |_|_|_|_ |_|_|_|_|_|_|_|_|_|_|_ |_| |_|_|_|_ |_|_|_|_
_|_|_|_|_|_|_|_|_|_ _ _|_|_|_|_ _ _|_|_|_|_|_|_|_|_|_|_| |_| |_| |_| |_|
|_| |_|_|_| |_|_|_| |_|_|_|_|_|_|_|_|_|_|_| |_|_|_| |_|_|_|_|_|_ _
_|_| _|_| _|_|_|_|_|_|_|_|_|_| _|_| _|_|_|_|_|_|_|_|
|_| |_| |_| |_|_|_|_|_|_|_|_ |_| |_| |_|_|_|_|_|_ _
_|_|_|_|_|_|_|_| _|_|_|_|_|_|_|_|
_ |_|_|_|_|_| |_|_ _ |_|_|_|_|_| |_|_
_|_| _|_|_|_| _|_| _|_| _|_|_|_| _|_|
|_|_ _|_|_|_|_ |_| |_|_ _|_|_|_|_ |_|
_|_|_|_|_|_|_|_| _|_|_|_|_|_|_|_|
|_| |_|_|_| |_|_ |_| |_|_|_| |_|_
_|_| _|_| _|_| _|_|
|_| |_| |_| |_|
Punktacja
To jest golf golfowy , więc wygrywa najkrótszy program w bajtach.
Odpowiedzi:
Rubinowy,
239201 bajtówJest to funkcja lambda, którą należy wywoływać w taki sam sposób, jak w wersji bez golfa.
Udoskonalenia gry w golfa obejmują: przypisanie
8<<n/2
zmiennej do ponownego wykorzystania;upto
pętla zamiasteach
pętli; trójskładnikowy zamiastif..else..end
; użyj[y,y+=d].max
do obliczenia, gdzie wydrukować|
; użycie?_
i?|
zamiast ekwiwalentu'|'
oraz'_'
; i eliminacja zbędnych%4
(dzięki Sp3000.)Opiera się na następującej formule z Wikipedii:
Wikipedia podaje następujący kod:
Ulepszyłem to, do
i/(i&-i)%4
czego używa tej samej techniki użycia wyrażenia,i&-i
aby znaleźć najmniej znaczącą cyfrę, ale moje wyrażenie daje bezpośrednio 1 (dla skrętu w lewo) lub 3 (dla skrętu w prawo), co jest przydatne, gdy śledzę kierunek jako liczbę0..3
(w zamów północ, zachód, południe, wschód ze względów golfowych.)Niegolfowany oryginał w programie testowym
źródło
f=
na początku, ponieważ zwykle nie jest to liczone jako anonimowe definicja funkcji (-2 bajty). Więcej jutro gry w golfa. Zauważ, że nadal będziesz musiał wykonać funkcję golfa, przypisując ją do zmiennejf=->n{.....}
i wywołując ją,f.call(n)
jak w przykładzie programu testowego.%4
nie jest konieczne, ponieważr
jest używane tylko w wyrażeniachr%2
ir&2
. Dzięki za wskazówkę. Jestem teraz do 202.Python 2,
270222 bajtówTeraz za pomocą wzoru na n-ty zakręt. Widziałem
(((n & −n) << 1) & n)
formułę na Wikipedii, ale nie zdawałem sobie sprawy, jak użyteczna była, dopóki nie zobaczyłem jej w odpowiedzi @ steveverrill . Właściwie to porzucam%4
, więc dużo się obraca, przez co większe nakłady zajmują trochę czasu.Uwaga boczna: To nie jest grafika, ale oto kod żółwia golfowego:
źródło
C #, 337 bajtów
Jest tu trochę nadużywania zasad. Nie ma ograniczeń dotyczących wiodącej przestrzeni. Niestety płótno jest skończone, więc istnieje górna granica dla n .
Wcięte dla przejrzystości:
źródło
JavaScript (ES6), 220
Korzystanie z formuły wikipedia dla skrętów w lewo i w prawo.
Mniej golfa
źródło
APL (Dyalog Unicode) ,
6564 bajtów SBCSWypróbuj online!
(⊢,0j1×⌽)⍣⎕,1
generuje listę kroków jako liczby zespolone. Zaczyna się od1
i wielokrotnie dołącza (,
) odwróconą (⌽
) kopię listy pomnożoną przez0j1
= sqrt (-1).+\0,
wstaw 0 i oblicz sumy prefiksów11 9∘○¨
rozkłada kompleks na (rzeczywiste; urojone) pary÷∘¯2 1¨
podziel rzeczywiste części przez -22+/
sumy sąsiednich par⌈
sufit(⊢-⌊/)
odejmij minima od wszystkich, aby współrzędne nie były ujemnea←
Przypisać doa
⍴∘''⊃1+⌈/
utwórz pustą macierz znaków, tak aby zmieściły się maks. kable('_|'⍴⍨≢a)@a
umieść naprzemiennie_
i|
na współrzędnych za
źródło