W naprzemiennej sekwencji Fibonacciego zaczynasz od 1
i 1
jak zwykle.
Jednak zamiast zawsze dodawać dwie ostatnie wartości w celu uzyskania następnej liczby, naprzemiennie zaczynasz od dodawania i za każdym razem odejmujesz.
Sekwencja zaczyna się w następujący sposób:
1
1
2 # 1 + 1
-1 # 1 - 2
1 # 2 + -1
-2 # -1 - 1
-1 # 1 + -2
-1 # -2 - -1
-2 # -1 + -1
1 # -1 - -2
-1 # -2 + 1
2 # 1 - -1
1 # -1 + 2
1 # 2 - 1
itp.
Zauważ, że po uruchomieniu na raz robi się 1
i 1
znowu.
Biorąc pod uwagę liczbę N , wydrukuj N- ty termin na przemian sekwencji fibonacciego.
Pamiętaj, że to jest golf golfowy , więc wygrywa kod z najmniejszą liczbą bajtów.
true
do1
?1
wartości liczą się jako wartości początkowe dla wyjścia? Czy możemy zacząć bezpośrednio od2
?Odpowiedzi:
JavaScript (ES6), 25 bajtów
0-indeksowane. Możesz skrócić ciąg z nieco rekurencyjną wersją, chociaż dodaje 6 bajtów:
Jest to wciąż krótsza niż ostateczna rekurencyjna formuła:
źródło
Python, 31 bajtów
Nie przeszkadza próba obliczenia wartości. Po prostu przegląda listę długości peroidycznej-12
[1, 1, 2, -1, 1, -2, -1, -1, -2, 1, -1, 2]
, która jest skompresowana w bazie 5.Porównaj z rozwiązaniem rekurencyjnym (37 bajtów) z
True
's dla 1:lub do przechowywania ciągów
lub próba wyrażenia arytmetycznego.
źródło
Oaza , 10 bajtów
Przypomina mi o wdrożeniu kolejnych wbudowanych elementów: p. Dane wejściowe mają indeks 0 .
Kod:
Wersja przetłumaczona:
I oblicza n- ty termin.
Wypróbuj online!
źródło
05AB1E , 10 bajtów
Wykorzystuje kodowanie CP-1252 . Wypróbuj online!
źródło
Pyth - 13 bajtów
Baza zakodowana w serii jednokrotnie, indeksowana modułowo.
Wypróbuj online tutaj .
źródło
Galaretka, 12 bajtów
TryItOnline!
Oparte na 1, biorąc pod uwagę pierwszą i drugą wartość
1
.Nie jestem pewien, czy jest to jeszcze krótsze, ale w tym celu zauważyłem, że seria ma okres 12:
[1, 1, 2, -1, 1, -2, -1, -1, -2, 1, -1, 2]
Więc wziąłem to i dodałem,
2
aby dać,[3, 3, 4, 1, 3, 0, 1, 1, 0, 3, 1, 4]
a następnie przekonwertowałem to jako
5
liczbę podstawową na bazę250
, aby dać:[11, 197, 140, 84]
(która jest
184222584
).źródło
Haskell,
3326 bajtówPodejście rekurencyjne. 0-indeksowane. Wypróbuj na Ideone.
Zaoszczędzono 7 bajtów dzięki xnor .
Stosowanie:
źródło
a!b=a:b:(a+b)!(-a)
.Mathematica, 40 bajtów
Po prostu tworzy tabelę przeglądową i uzyskuje do niej dostęp cyklicznie, jak w odpowiedzi ETHproductions. Funkcja bez nazwy, indeksowana 1.
źródło
MATL ,
171615 bajtówDane wejściowe są oparte na 1.
Wypróbuj online!
Wyjaśnienie
Sekwencja ma kropkę
[1 1 2 -1 1 -2 -1 -1 -2 1 -1 2]
.źródło
WinDbg, 26 bajtów
Dane wejściowe są przekazywane przez pseudo-rejestr
$t0
. 0-indeksowane. +2 każdego terminu w sekwencji jest zapisywane w postaci 3 bitów85824331b
.Jak to działa:
Przykładowe dane wyjściowe, pętla drukująca pierwsze 14 wartości sekwencji:
źródło
Java, 32 bajty
Ponieważ jest to Java, odpowiedź jest indeksowana na 0.
Testowanie i niestosowanie:
Testuj na Ideone
źródło
Matematyka,
454138 bajtówDzięki @MartinEnder za 3 bajty.
0-indeksowane.
Stosowanie
źródło
±
zamiast funkcjia
.Perl 6 ,
39 3532 bajtówźródło
C #, 117 bajtów
Gra w golfa:
Nie golfowany:
Testowanie:
źródło
public int A(int n)
terazn=>
możesz usunąć nawiasy klamrowe wokół instrukcji for, oszczędzając 2 bajty, możesz wstępnie zwiększyći
pętlę tj.++i <= n
I ustawići = 2
oszczędzanie 3 bajtów, ponieważ usuwa onai++
na końcu instrukcjiR, 38 bajtów
Wykorzystuje rozwiązanie tabeli odnośników inspirowane odpowiedzią JET @ETHproductions.
Edycja: zapomniałem wspomnieć, że jest to indeks 1.
źródło
Właściwie 22 bajty
Wypróbuj online!
Wyjaśnienie:
źródło
Java 7,
888279 bajtówgrał w golfa:
bez golfa:
Wypróbuj online
źródło
int
jako typ zwrotu. 2. można oszczędzić bajty, przenosząc przypisanie 0 do deklaracji i:int c,i=0
ifor(;i<n;){
. 3. Możesz usunąć nawias wokół warunku operatora trójskładnikowego.DC, 55 bajtów
0-indeksowane.
Rejestr d przechowuje indeks wartości. Rejestr n liczy liczbę zakończonych iteracji. Zarejestruj się r przechowuje główne makro. Zarejestruj y przechowuje późniejszą wartość w sekwencji, podczas gdy stos zawiera wcześniejszą wartość w sekwencji.
Wizualne wyjaśnienie tego, co dzieje się w dużej pętli (przy założeniu dodania):
Sprawdzenie, czy dodać, czy odjąć, bierze licznik modulo dwa i wykorzystuje tę sztuczkę do stworzenia konstrukcji if if else.
Na końcu stos zawiera pojedynczą liczbę, pożądaną wartość, którą drukuje się
p
.(Jestem nowy
dc
, więc spodziewam się, że zostaną tutaj wprowadzone pewne oczywiste ulepszenia).źródło
ForceLang , 153 bajty
źródło
Turtlèd , 35 bajtów
0 zindeksowanych
Wyjaśnienie:
Wypróbuj online!
źródło
ABCR, 43 bajty
Objaśnienie: pierwsza część (
)AAB)ABB..A))A..A)AA(ABB.)A+A)))A
) ustawia kolejkę A, aby zawierała [1, 1, 2, -1, 1, -2, -1, -1, -2, 1, -1, 2], pozostawiając wszystkie pozostałe kolejki puste .iB
przechowuje pożądany termin, a pętla5aAb(Bx
tyle razy przechodzi przez kolejkę.o
wypisuje przód kolejki jako liczbę, która będzie naszą pożądaną odpowiedzią.źródło
Partia, 49 bajtów
Pobiera dane wejściowe jako parametr wiersza polecenia. Objaśnienie: Formularz zamknięty korzysta z następujących obserwacji:
Dlatego zaczynamy od zmniejszenia modulo 12 (aby zaoszczędzić 2 bajty). Następnie zmniejszamy moduł trzy i odwracamy wynik, który w przeciwnym razie wynosi 1 dla wielokrotności 3 lub 0. Następnie bitowo nie otrzymujemy tej wartości, co daje nam -2 dla wielokrotności 3 lub -1 w przeciwnym razie. Następnie zmniejszamy moduł 5 i dzielimy osobno przez 4, dając zero dla warunków 1, 2, 3, 5, 10 i 12 (0). Odwracanie i negowanie daje nam -1 dla tych wartości i zero dla innych wartości. Następnie bitowo lub to przez 1 i mnożymy przez wcześniejsze obliczenia.
źródło
TI-Basic, 26 bajtów
Niestety bardzo nieciekawe podejście. Nie mogłem znaleźć nic krótszego. Lista jest indeksowana 1.
źródło
C #,
7371 bajtówWykorzystuje 0 indeksowane wartości n.
Wersja sformatowana:
źródło