Binarna sekwencja rekurencyjna to rekurencyjnie zdefiniowana sekwencja następującej postaci:
Jest to uogólnienie x = 1, y = 2, a = [1, 1], alpha = 1, beta = 1
sekwencji Fibonacciego ( ) i sekwencji Lucas ( x = 1, y = 2, a = [2, 1], alpha = 1, beta = 1
).
Wyzwanie
Biorąc pod uwagę n
, x
, y
, a
, alpha
, i beta
w każdym rozsądnym formacie wyjście n
th określenie odpowiedniego binarnej sekwencji nawrotów.
Zasady
- Możesz wybrać, aby sekwencja była indeksowana 1 lub 0, ale twój wybór musi być spójny dla wszystkich danych wejściowych i musisz zanotować swój wybór w swojej odpowiedzi.
- Możesz założyć, że nie zostaną podane żadne nieprawidłowe dane wejściowe (takie jak sekwencja, która kończy się przed
n
lub sekwencja, która odwołuje się do niezdefiniowanych terminów, takich jakF(-1)
lubF(k)
gdziek > n
). W wyniku tegox
iy
zawsze będzie pozytywny. - Wejścia i wyjścia będą zawsze liczbami całkowitymi, w granicach naturalnych liczb całkowitych twojego języka. Jeśli twój język ma nieograniczone liczby całkowite, wejścia i wyjścia będą się mieścić w zakresie
[2**31, 2**31-1]
(tj. Zakresie liczby całkowitej z dopełnieniem dwóch znaków ze znakiem 32-bitowym). a
zawsze będzie zawierał dokładniey
wartości (zgodnie z definicją).
Przypadki testowe
Uwaga: wszystkie przypadki testowe mają indeks 0.
x = 1, y = 2, a = [1, 1], alpha = 1, beta = 1, n = 6 => 13
x = 1, y = 2, a = [2, 1], alpha = 1, beta = 1, n = 8 => 47
x = 3, y = 5, a = [2, 3, 5, 7, 11], alpha = 2, beta = 3, n = 8 => 53
x = 1, y = 3, a = [-5, 2, 3], alpha = 1, beta = 2, n = 10 => -67
x = 5, y = 7, a = [-5, 2, 3, -7, -8, 1, -9], alpha = -10, beta = -7, n = 10 => 39
a
w odwrotnej kolejności jest uzasadnione?Odpowiedzi:
Galaretka , 11 bajtów
Wypróbuj online! 1 | 2 | 3 | 4 | 5
Jak to działa
źródło
Python 2, 62 bajty
Bezpośrednie rozwiązanie rekurencyjne. Wszystkie dane wejściowe są pobierane z STDIN, z wyjątkiem
n
argumentu funkcji, który jest domyślnie dozwolony (choć sporny).Wydaje się, że nie ma sposobu na zaoszczędzenie bajtów
and/or
zamiast,if/else
ponieważl[n]
może być falsey jako 0.źródło
Python 2, 59 bajtów
Przetestuj na Ideone .
źródło
JavaScript (ES6),
5144 bajtówZauważ, że funkcja jest częściowo curry, np.
f(1,2,[1,1],1,1)(8)
Zwraca 34. Kosztowałoby 2 bajty, aby uniezależnić funkcje pośrednie od siebie (obecnie tylko ostatnia funkcja generowana działa poprawnie).Edycja: Zapisano 7 bajtów dzięki @Mego wskazując, że przeoczyłem, że przekazana tablica zawsze zawiera pierwsze
y
elementy wyniku.źródło
Haskell,
5448 bajtówźródło
J, 43 bajty
Biorąc pod uwagę początkową sekwencję terminów A , oblicza następny termin n razy przy użyciu parametrów x , y , α i β . Następnie wybiera n- ty składnik w sekwencji rozszerzonej i wysyła go jako wynik.
Stosowanie
Ponieważ J obsługuje tylko 1 lub 2 argumenty, pogrupowałem wszystkie parametry jako listę list w ramkach. Początkowe wartości początkowe A są pierwsze, po których następują parametry x i y jako lista, a następnie parametry α i β jako lista, kończące się na wartości n .
źródło