Twoje zadanie: biorąc pod uwagę liczbę całkowitą n
, wygeneruj osadzony wzorzec sześciokąta zgodnie z poniższymi zasadami do n-tej głębokości.
Osadzony sześciokąt ma podstawowy kształt: ( n=0
)
__
/ \
\__/
Osadzone sześciokąty n=1
i n=2
:
____
/ \ \
/\__/ \
\ /
\____/
________
/ \ \ \
/\__/ \ \
/\ / \
/ \____/ \
\ /
\ /
\ /
\________/
Długość każdej strony jest 2 razy większa niż długość tego samego boku w poprzedniej głębokości razy dwa. Górna i dolna strona mają długość 2 znaków, n=0
a reszta zaczyna się od 1 znaku. Długości boków innych niż góra-dół powinny być 2^n
długie ( OEIS: A000079 ), a boki górny i dolny powinny być zgodne z 2^(n+1)
tą samą zasadą (ten sam OEIS).
Bieżące sześciokąty mają indeks 0, możesz zdecydować o użyciu indeksowania 1, jeśli chcesz.
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź!
code-golf
ascii-art
hexagonal-grid
Towarzyszu SparklePony
źródło
źródło
n
?Odpowiedzi:
Węgiel drzewny ,
4029 bajtów11 bajtów zapisanych dzięki @Neil, zmieniając pętlę while na pętlę for między innymi sztuczkami
Wypróbuj online!
Wyjaśnienie (nieaktualne)
Ten program rozpoczyna się od wygenerowania największego sześciokąta, a następnie wykonuje mniejsze po kolei w pętli while (indeksowane 1). Dla odniesienia,
α
jest liczbą wejściową,β
jest zmienną, która zawiera2^(α-1)
iι
jest zmienną iteracyjną w pętli.źródło
×_X²ι
jest to to samo×__β
, i kilka innych bajtów, przekształcając twójW
wF
, co również pozwala uniknąć konieczności przechowywania numeru wejściowego. Wypróbuj online! .Haskell ,
230217207 bajtówEDYTOWAĆ:
#
może być sprawiedliwymax
.zipWith
ip
może zostać połączone w?
operatora, i że (jakoś!) Ponownie go wdrożyłemreplicate
.m
bierzeInteger
i zwraca aString
.Wypróbuj online!
Jak to działa
m
jest główną funkcją. Używa&
do generowania sześciokątów z odpowiednim wypełnieniem, a następnie składa je razemo
.l&t
generuje mały sześciokąt o długości bokut
, wypełniony wewnątrz dużego o boku długościl
, jako listaString
linii.a
to górna linia sześciokąta z podkreśleniami.b
jest listą innych linii w górnej połowie sześciokąta. Linieb
są wyśrodkowane na prostokątnej wyściółce; pozwala to na kolejny krok do pracy.a
nakładany na górzeb
zo
, a następnie odwrócony (zarówno kolejności linii oraz w każdej linii).c
pobiera dwa argumenty, listę długości i ciąg znaków i generuje ciąg znaków, który ma tyle kopii każdego znaku w oryginale, co odpowiadająca mu długość, npc[1,3,2]"abc" == "abbbcc"
. Służy&
do generowania linii.o
pobiera dwa argumenty przedstawiające zdjęcia jako listy linii i nakłada pierwszy, mniejszy na drugi.?
dwukrotnego wypełnienia pierwszego obrazu nieskończoną liczbą spacji zarówno w dół, jak i w prawo, a następnie skompresowania odpowiednich znaków za pomocąmax
, który wybiera znak spacji, jeśli taki istnieje.(f?e)l m
Podkładki listęl
poprzez dołączenie nieskończenie wiele elementów „e”, a następnie zamki otrzymanej listy i listym
zf
funkcji.źródło
(#)
może byćmax
.p
aby zapisać bajtów:o=max?' '?"";f?e=z f.(++repeat e)
. Może być krótszy bez celu.(\n->(<$[1..n]))
jestreplicate
.replicate
? To po prostu kłopotliwe. Jestem po prostu zbyt przyzwyczajony<$[1..n]
lub[1..n]>>
prawie zawsze wygrywam. Nie wiem jednak, jak?
dalej skracać . Próbowałem już zrobićp
bezcelowe, a to++
jest po prostu w niewłaściwym miejscu, wysadzając rzeczyflip
.JavaScript (ES6), 258 bajtów
Objaśnienie: W przypadku sześciokątów po pierwszym poprzedni sześciokąt jest najpierw generowany i wypełniany z każdej strony (zależy to od tego, czy dane wyjściowe są prostokątem). (Dla pierwszego nagłówka tworzona jest część zastępcza.) Generowane są górne i górne strony sześciokąta, a wszystkie spacje zostały scalone z poprzednim sześciokątem. (Jest trochę sztuczek, aby ustawić sześciokąty w szeregu; byłoby łatwiej, gdyby dopuszczono dodatkowe marginesy.) Dolne boki sześciokąta są generowane analogicznie do górnych boków, a następnie dolna część sześciokąta jest wypełniana. Należy zwrócić uwagę, aby zwrócić prostokątny wynik, w tym znak nowej linii, aby rekurencja zadziałała.
źródło
/
są popularne w sztuce ASCII, areplace
metoda jest stosunkowo tanim sposobem ich generowania w JavaScript.1<<n>>1
: Niezła symetria ;-)v
ale niestety1
nie jest symetryczna w żadnej z moich zwykłych czcionek.PHP, 337 bajtów
0 Indeksowanie
Wypróbuj online!
Rozszerzony
źródło