Opis warkocza
W tym warkoczu, gdy nić przecina się nad drugą nicią, dodaje do niej wartość drugiej nici i wszystkie inne wartości nici przechodzą. Warkocz ma trzy pasma, a każdy z nich zaczyna się od 1. Pierwszy skrzyżowanie to pasmo skrajnie lewe przecinające pasmo środkowe. Kolejnym skrzyżowaniem jest pasmo skrajnie prawe przecinające nowy pas środkowy (poprzednio pasmo najbardziej lewe). Te dwa etapy zwrotnicy powtarzają się. Innymi słowy, pierwszy crossover jest, [a, b, c] -> [b, a+b, c]
a drugi jest [a, b, c] -> [a, b+c, b]
. Korzystając z tych reguł tutaj, jest sześć pierwszych poziomów warkocza:
1,1,1
1,2,1
1,3,2
3,4,2
3,6,4
6,9,4
Twoje zadanie
Napisz program w golfa lub funkcję, która przyjmuje liczbę całkowitą jako poziom plecionki i wyświetla trzy wartości dla tego poziomu plecionki. Musisz wskazać, czy Twoje poziomy są zerowe czy oparte na jednym. Dane wejściowe i wyjściowe mogą mieć dowolny rozsądny format i dozwolona jest końcowa spacja.
Przypadki testowe (oparte na 1)
1 -> 1,1,1
2 -> 1,2,1
5 -> 3,6,4
10 -> 28,41,19
Odpowiedzi:
MATL ,
181716 bajtówDane wejściowe są oparte na 0.
Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
Biorąc pod uwagę wektor rzędu
[a b c]
, następny wektor jest uzyskiwany po pomnożeniu go przez jedno z nichlub
w zależności od tego, czy indeks iteracji jest nieparzysty czy parzysty. Na przykład
[1 3 2]*[0 1 0; 1 1 0; 0 0 1]
daje produkt matrycowy[3 4 2]
. Potem[3,4,2]*[1 0 0; 0 1 1; 0 1 0]
daje[3 6 4]
i tak dalej.Zauważ też, że druga matryca jest równa pierwszemu obróconemu o 180 stopni, które można wykorzystać do zaoszczędzenia kilku bajtów.
źródło
[[0, 1, 0], [1, 1, 1], [1, 1, 0]]
a różne pozycje początkowe są dość podobne dla parzystych i nieparzystychn
Haskell, 51 bajtów
Korzysta z indeksowania opartego na 0. Przykład użycia:
(f(1,1,1)!!) 10
->(28,60,41)
.f
tworzy nieskończoną listę potrójnych plecionek i(f(1,1,1)!!)
wybiera n-ty.f
sama w sobie jest prostą rekurencją, która tworzy listę jej argumentów, po której następuje lewy crossover i rekurencyjne wywołanie z lewym i prawym crossoverem.źródło
Rubinowy,
6057 bajtówPoziomy są oparte na 1.
Oparty na następującej formule:
Dzięki Neilowi za 3 bajty mniej z kilkoma fajnymi bitowymi shenaniganami.
źródło
[f[n-2|1],f[n],f[n-1&-2]]
.Python 2 , 57 bajtów
Wypróbuj online!
źródło
Galaretka , 14 bajtów
Wypróbuj online!
Jak to działa
źródło
TI-Basic, 58 bajtów
One-based.
źródło
Prompt
jest poleceniem 2-bajtowym.Prompt
to tylko jeden bajt. Ale dziękuję za wyjaśnienie koncepcji tokenów :)PowerShell 2+, 75 bajtów
Indeks oparty na 1
Wypróbuj online! lub Wypróbuj wszystkie przypadki testowe!
Pętla zawsze działa raz, więc w przypadku poziomu oplotu
1
po prostu zaczynam od tablicy,1,1,0
więc wynik algorytmu z make to1,1,1
.$a[1]
jest zawsze środkiem, po prostu ustalam, czy indeks drugiego elementu ($d
) będzie,0
czy2
na podstawie tego, czy bieżący poziom jest parzysty czy nieparzysty. PowerShell obsługuje wiele przypisań jednocześnie, więc zamiana staje się tak łatwa, jak w$x,$y=$y,$x
zasadzie to, co robię z elementami tablicy, po prostu osadzając dodatek w tym zadaniu.źródło
JavaScript (ES6), 55 bajtów
repl.it
Na podstawie 1
To tylko część odpowiedzi Ruby @ Doorknob z niesamowitym bitowym golfem @ Neila.
źródło
Befunge, 64 bajty
Wypróbuj online!
Wyjaśnienie
źródło
05AB1E , 17 bajtów
Wypróbuj online!
źródło
Java 8, 121
Wykorzystuje poziomy oparte na jednym:
Bez golfa, z programem testowym:
Wydajność:
źródło
GameMaker Language, 113 bajtów
Indeksowane, oparte na rekurencyjnym rozwiązaniu Doorknob. Nie pytaj, dlaczego nie możesz zainicjować prymitywnej tablicy jednocześnie w GameMaker, naprawdę nie wiem ...
Główny program (69 bajtów):
Podprogram
a
(46 bajtów):źródło
Perl 6 , 60 bajtów
Zero.
Prosto wygenerowano leniwą nieskończoną sekwencję, a następnie indeksuje ją.
Prawdopodobnie istnieją lepsze podejścia.
źródło
Clojure, 98 bajtów
Śledzi bieżącą wartość
v
i pozycje, z których należy dokonać podsumowania dla następnej rundy. Uruchamia jeden stan przed[1 1 1]
indeksowaniem 1.źródło
C #
8886 bajtówWyjaśnienie
źródło
Mathematica, 68 bajtów
Prosta rekurencyjna definicja funkcji bez nazwy, przyjmując argument liczby całkowitej dodatniej i zwracając uporządkowaną listę trzech liczb całkowitych.
źródło