Twoje zadanie: zrób sześciokątny trójkąt o długości boku n
, gdzie n
dodatnia liczba całkowita lub 0.
Najpierw pozwól mi zdefiniować sześciokąt:
/ \
| |
\ /
(Niesamowita sztuka ASCII, prawda?)
Sześciokąty można łączyć, dzieląc strony:
/ \ / \
| | |
\ / \ /
/ \
| |
/ \ /
| |
\ /
Sześciokątny trójkąt jest następujący:
/ \
| |
/ \ / \
| | |
\ / \ /
Ten sześciokątny trójkąt ma bok o długości 2--2 sześciokąty są wymagane do wykonania jednego boku. Sześciokątny trójkąt o boku 1 jest tylko pojedynczym sześciokątem, a sześciokąt o boku 0 jest pusty.
Bardziej formalnie, sześciokątny trójkąt jest trójkątem złożonym z sześciokątów połączonych ich bokami. Górny sześciokąt łączy się z dwoma pod nim po jego dwóch dolnych bokach. Trójkąt w lewym dolnym rogu prowadzi do tego po prawej i prawej górnej stronie, a trójkąt w prawym dolnym rogu łączy się z tymi po lewej i górnej lewej stronie. Istnieje sześciokąty w między tymi narożnych, połączonych przez swoich stronach przeciwnych, a ich liczba jest n-2
. Trójkąty nie są wypełnione.
Więcej przykładów:
Side length 3:
/ \
| |
/ \ / \
| | |
/ \ / \ / \
| | | |
\ / \ / \ /
Side length 4:
/ \
| |
/ \ / \
| | |
/ \ / \ / \
| | | |
/ \ / \ / \ / \
| | | | |
\ / \ / \ / \ /
(This triangle isn't really filled, the borders make it look like there is a hexagon in the middle, but there is not.)
Side length 5:
/ \
| |
/ \ / \
| | |
/ \ / \ / \
| | | |
/ \ / \ / \
| | | |
/ \ / \ / \ / \ / \
| | | | | |
\ / \ / \ / \ / \ /
Side length 6:
/ \
| |
/ \ / \
| | |
/ \ / \ / \
| | | |
/ \ / \ / \
| | | |
/ \ / \ / \
| | | |
/ \ / \ / \ / \ / \ / \
| | | | | | |
\ / \ / \ / \ / \ / \ /
źródło
Odpowiedzi:
Węgiel ,
624339 bajtówWypróbuj online! Edycja: Zapisałem niektóre bajty dzięki tylko @ ASCII (nie jestem pewien, ile dokładnie, ponieważ zapisałem także kolejne
610 bajtów, ale potem musiałem wydać 4 bajty na poprawkę błędu). Teraz używamy zagnieżdżonych pętli, i tak właśnie powinno być.źródło
A / \¶| |¶ \ /αNβFβ«α←←»Fβ«α↖↖M⁶←»Fβ«αM⁴↑←←
(btw węgiel automatycznie uzupełnia wszelkie potrzebne»
na końcu)Assign(hexagon_with_space_to_left, a);InputNumber(b);for(b){Print(a);Move(:Left);Move(:Left);}for(b){Print(a);Move(:UpLeft);Move(:UpLeft);Move(6, :Left);}for(b){Print(a);Move(4, :Up);Move(:Left);Move(:Left);}
każda pętla for rysuje jedną stronęPython 2,
184177174164 bajtówWypróbuj online!
-7 bajtów dzięki Ørjan Johansen
źródło
|
s w górnej trójce i dolnym rzędzie sześciokąta.p[:4]*(i+2)
zamiastp[:4]*(i+1)
wydaje się to naprawić.b
w jednym miejscu, więc łączenie tego ze swoją~
sztuczkąw=' '*2*~(i-n)
jest krótsze o 7 bajtów.JavaScript (ES6), 243 bajty
źródło
JavaScript (ES6),
133129128126 bajtówTworzy znak wyjściowy po znaku z dwoma pętlami for .
Jak to działa
W zewnętrznej pętli y iteruje od n * 2-1 do -1 . W wewnętrznej pętli x iteruje od n * 4-1 do -1 . Ustawiamy k = (x + y) i 3 , który jest podstawowym wzorcem używanym do generowania sześciokątów.
Poniżej przedstawiono wynikową siatkę dla n = 4 :
W parzystych wierszach komórka jest wypełniona znakiem potoku, gdy k = 3 , a spacją w przeciwnym razie. Potok jest piątym znakiem w naszym ciągu referencyjnym
" \ /|"
, więc poprawny indeks podaje (k + 1) i 4 .W nieparzystych wierszach każda komórka jest wypełniona bezpośrednio odpowiednim znakiem w ciągu referencyjnym:
Poniżej znajduje się nasz zaktualizowany przykład (spacje zastąpione kropkami):
W poniższych formułach definiujemy N = n * 4 dla czytelności (chociaż w kodzie używana jest ta sama zmienna).
Kształt trójkąta uzyskuje się poprzez przetestowanie:
A wewnętrzna część jest usuwana przez testowanie:
Próbny
Pokaż fragment kodu
źródło
[x>y-2&x<n-y&(x>n-y-6|x<y+4|y<2)&&y&1?x+y&3:x-~y&4]
działa(x+y+1)&4
to nie to samo, co(((x+y)&3)+1)&4
.Galaretka ,
6261 bajtówObecnie zawiera sześć szóstek.
Wypróbuj online!
W jaki sposób?
źródło
>
wyjaśnienia (<space
)ẋ
pod spacją wyjaśnienie jest źle dopasowane”, daj mi znać.Pyth , 82 bajty
Wypróbuj online!
źródło
Mathematica, 155 bajtów
z
\n
zastąpionym nową linią.Bardziej czytelny:
Tworzy tablicę znaków, indeksowaną przez i od 1 do 4 n + 1 w poziomie, a j od 1 do 2 n + 1 w pionie. Pierwszy,
Switch[Mod[i+d+{j,-j},4],{1,3},"/",{3,1},"\\",{1,1},"|",_," "]
wypełnia sześciokątną siatkę:następnie
If[i+j<d||i-j>d+1||i+j>d+5&&i-j<d-3&&j<d-1," ",...]
zamienia to na" "
zewnątrz niewypełnionego trójkąta.źródło