Wprowadzenie
Podobnie jak Sekwencja Fibonacciego, Sekwencja Padovana ( OEIS A000931 ) jest sekwencją liczb, która jest wytwarzana przez dodanie poprzednich terminów w sekwencji. Początkowe wartości są zdefiniowane jako:
P(0) = P(1) = P(2) = 1
Warunki 0, 1 i 2 są wszystkie 1. Relacja powtarzalności jest podana poniżej:
P(n) = P(n - 2) + P(n - 3)
W ten sposób uzyskuje się następującą sekwencję:
1, 1, 1, 2, 2, 3, 4, 5, 7, 9, 12, 16, 21, 28, 37, 49, 65, 86, 114, 151, 200, 265, 351, ...
Używanie tych liczb jako długości boków trójkątów równobocznych daje fajną spiralę, gdy umieścisz je wszystkie razem, podobnie jak Spirala Fibonacciego:
Zdjęcie dzięki uprzejmości Wikipedia
Zadanie
Twoim zadaniem jest napisanie programu, który odtworzy tę spiralę za pomocą wyjścia graficznego, z danymi wejściowymi odpowiadającymi temu terminowi.
Zasady
- Twoje zgłoszenie musi być w stanie obsłużyć co najmniej do 10. kadencji (9)
- Twoje zgłoszenie musi być pełnym programem lub funkcją, która pobiera dane wejściowe i wyświetla wynik graficzny (wyświetla obraz lub wykresy itp.)
- Musisz przedstawić dowód swojej grafiki w swoim zgłoszeniu
- Dozwolone są obroty wyjścia, w wielokrotnościach 60 stopni, z tą samą reprezentacją
- Dozwolone jest również poruszanie się w lewo
- Standardowe luki są zabronione
Możesz założyć, że dane wejściowe będą> 0 i że podany zostanie prawidłowy format danych wejściowych.
Punktacja
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach. Szczęśliwego Nowego Roku wszystkim!
źródło
Odpowiedzi:
Mathematica,
119108 bajtówDzięki Martin Ender za uratowanie 11 bajtów!
Nienazwana funkcja przyjmująca dodatni argument liczby całkowitej (indeksowany 1) i zwracająca wyjście grafiki. Przykładowe dane wyjściowe dla danych wejściowych
16
:Opracowany równolegle z odpowiedzią Matlaba na flawr, ale z wieloma podobieństwami w projekcie - nawet z definicją
I^(2/3)
szóstego pierwiastka jedności! Wersja łatwiejsza do odczytania:Wiersz 1 określa sekwencję Padovana
±n = P(n)
. Linia 4 tworzy zagnieżdżoną tablicę liczb zespolonych, definiującychz
po drodze; ostatnia część±# z^(#+{2,4,1})&~Array~#
generuje wiele trójek, z których każdy odpowiada wektorom, które musimy narysować, aby ukończyć odpowiedni trójkąt (±#
kontroluje długość, az^(#+{2,4,1})
kontroluje kierunki). Wiersz 3 pozbywa się zagnieżdżania listy, a następnie oblicza sumy całkowite liczb zespolonych w celu konwersji z wektorów na czyste współrzędne; linia 2 następnie konwertuje liczby zespolone na uporządkowane pary liczb rzeczywistych i wysyła odpowiednią linię wielokąta.źródło
Matlab,
202190 bajtówDane wyjściowe dla
N=19
(indeksowanie 1):Wyjaśnienie
Szorstki pomysł polega zasadniczo na pracy ze liczbami zespolonymi. Wtedy krawędzie trójkątów zawsze wskazują kierunek szóstego pierwiastka jedności.
źródło
PHP + SVG, 738 bajtów
Wyjście dla 16
źródło
$k%6==0
mogą być$k%6<1
i$k%6==5
mogą być$k%6>4
.Python 3,
280, 262 bajtów18 bajtów zapisanych dzięki ovs
Gra w golfa:
To samo z niektórymi komentarzami:
Zrzut ekranu dla
N=9
:źródło
dwitter 151
można przetestować na http://dwitter.net (użyj pełnego ekranu)
Podstawowym pomysłem jest logo żółwia, golfa. ukradł P () func z góry!
Wyobrażam sobie, że rekurencja może zwiększyć golfa, ale nie jest źle.
źródło
LOGO, 119 bajtów
Do użytku, coś takiego zrobić to :
Przykładowe dane wyjściowe (nie można osadzić, ponieważ nie jest to HTTPS i nie można przesłać do imgur)
źródło