Przepływu węża, znany również jako krzywa Gosper'a jest fraktalny krzywa rośnie wykładniczo z każdym rozmiaru zlecenia / iteracji procesie prostym. Poniżej znajdują się szczegóły dotyczące budowy i kilka przykładów dla różnych zamówień:
Zamów 1 Flow Snake :
____
\__ \
__/
Zamówienie 2 Flow Snake :
____
____ \__ \
\__ \__/ / __
__/ ____ \ \ \
/ __ \__ \ \/
\ \ \__/ / __
\/ ____ \/ /
\__ \__/
__/
Zamów 3 Flow Snake :
____
____ \__ \
\__ \__/ / __
__/ ____ \ \ \ ____
/ __ \__ \ \/ / __ \__ \
____ \ \ \__/ / __ \/ / __/ / __
____ \__ \ \/ ____ \/ / __/ / __ \ \ \
\__ \__/ / __ \__ \__/ / __ \ \ \ \/
__/ ____ \ \ \__/ ____ \ \ \ \/ / __
/ __ \__ \ \/ ____ \__ \ \/ / __ \/ /
\ \ \__/ / __ \__ \__/ / __ \ \ \__/
\/ ____ \/ / __/ ____ \ \ \ \/ ____
\__ \__/ / __ \__ \ \/ / __ \__ \
__/ ____ \ \ \__/ / __ \/ / __/ / __
/ __ \__ \ \/ ____ \/ / __/ / __ \/ /
\/ / __/ / __ \__ \__/ / __ \/ / __/
__/ / __ \ \ \__/ ____ \ \ \__/ / __
/ __ \ \ \ \/ ____ \__ \ \/ ____ \/ /
\ \ \ \/ / __ \__ \__/ / __ \__ \__/
\/ / __ \/ / __/ ____ \ \ \__/
\ \ \__/ / __ \__ \ \/
\/ \ \ \__/ / __
\/ ____ \/ /
\__ \__/
__/
Budowa
Rozważ kolejność zbudowania 1 Flow Snake'a ze ścieżką zawierającą 7 krawędzi i 8 wierzchołków (oznaczonych poniżej. Powiększone dla możliwości):
4____5____6
\ \
3\____2 7\
/
0____1/
Teraz dla każdego następnego zamówienia po prostu zastępujesz krawędzie obróconą wersją tego oryginalnego wzoru zamówienia 1. Aby wymienić krawędzie, użyj 3 następujących zasad:
1 W przypadku poziomej krawędzi zamień ją na oryginalny kształt w następujący sposób:
________
\ \
\____ \
/
____/
2 W przypadku /
krawędzi ( 12
w powyższej konstrukcji) zamień ją na następującą obróconą wersję:
/
/ ____
\ / /
\/ /
/
____/
3 W przypadku \
krawędzi ( 34
i 67
powyżej) zamień ją na następującą obróconą wersję:
/
/ ____
\ \ \
\ \ \
\ /
\/
Na przykład będzie wyglądać kolejność 2 z wierzchołkami z oznaczonej kolejności 1
________
\ \
________ \____ \6
\ \ / /
\____ \5___/ / ____
/ \ \ \
4___/ ________ \ \ \7
/ \ \ \ /
/ ____ \____ \2 \/
\ \ \ / /
\ \ \3___/ / ____
\ / \ / /
\/ ________ \/ /
\ \ /
\____ \1___/
/
0___/
Teraz dla dowolnego wyższego rzędu wystarczy rozbić bieżący poziom na krawędzie o długości 1 /
, 1 \
lub 2 _
i powtórzyć proces. Należy pamiętać, że nawet po wymianie wspólne wierzchołki między dowolnymi dwoma kolejnymi krawędziami są nadal zbieżne.
Wyzwanie
- Musisz napisać funkcję pełnego programu, który odbiera jedną liczbę całkowitą
N
za pomocą argumentu STDIN / ARGV / function lub najbliższego odpowiednika i wypisuje kolejnośćN
Flow Snake na STDOUT. - Wejściowa liczba całkowita jest zawsze większa niż
0
. - Nie powinno być żadnych spacji wiodących, które nie są częścią wzoru.
- Nie powinno być ani końcowych spacji, ani wystarczającej spacji końcowych do wypełnienia wzoru, aby całkowicie wypełnić minimalny prostokąt ograniczający.
- Końcowy znak nowej linii jest opcjonalny.
Zabawne fakty
- Flow Snakes to gra słów o Snow Flakes, która przypomina ten wzór dla rzędu 2 i wyższych
- Flow and Snakes faktycznie odgrywają rolę we wzorze, ponieważ wzór składa się z jednej przepływającej przez nie ścieżki.
- Jeśli zauważysz uważnie, wzorzec rzędu 2 (a także wyższy) składa się z rotacji wzorca rzędu 1 obróconego na wspólnym wierzchołku bieżącej i poprzedniej krawędzi.
- Istnieje wariant węży przepływowych spoza ASCII, który można znaleźć tutaj i w kilku innych miejscach.
To jest code-golf, więc wygrywa najkrótszy kod w bajtach!
Tabela liderów
Pierwszy post z serii generuje tabelę wyników.
Aby mieć pewność, że Twoje odpowiedzi się pojawią, zacznij każdą odpowiedź od nagłówka, używając następującego szablonu Markdown:
# Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:
# Ruby, <s>104</s> <s>101</s> 96 bytes