Prawdopodobnie wszyscy znacie sekwencję Fibonacciego:
fibonacci(n)=fibonacci(n-1)+fibonacci(n-2)
fibonacci(0)=0
fibonacci(1)=1
Twoje zadanie jest tak proste, jak mogłoby być:
- Biorąc pod uwagę całkowitą
N
obliczeniowychfibonacci(n)
ale oto zwrot akcji:
- Zrób też negatywne
N
Czekać. Co?
fibonacci(1)=fibonacci(0)+fibonacci(-1)
więc
fibonacci(-1)=1
i
fibonacci(-2)=fibonacci(0)-fibonacci(1)=-1
i tak dalej...
- Jest to golfowy kod, więc wygrywa najkrótszy program w bajtach.
- Możesz przesłać funkcję lub pełny program
- N jest w [-100,100]
Przypadki testowe w CSV:
-9;-8;-7;-6;-5;-4;-3;-2;-1;0;1;2;3;4;5;6;7;8
34;-21;13;-8;5;-3;2;-1;1;0;1;1;2;3;5;8;13;21
Wskazówka:
n <0 oraz n & 1 == 0:
fibonacci(n)=fibonacci(abs(n))*-1
Odpowiedzi:
Mathematica, 9 bajtów
Tak, ta wbudowana funkcja obsługuje liczby ujemne.
źródło
Oktawa, 20 bajtów
Wypróbuj online!
Wyjaśnienie
Wykorzystuje to fakt, że sekwencję Fibonacciego
f(n)
można zapisać jako (powinna to być notacja wektora macierzy):Rekurencyjnie:
Wyraźnie:
Oznacza to, że górny prawy wpis tej macierzy do potęgi
n
jest wartościąf(n)
, której szukamy. Oczywiście możemy również odwrócić tę macierz, ponieważ ma ona pełną rangę, a związek nadal opisuje tę samą relację powtarzalności. Oznacza to, że działa również w przypadku negatywnych danych wejściowych.źródło
ans(-6)
ma być pozytywny?Maxima, 3 bajty
obsługuje liczby dodatnie i ujemne.
Wypróbuj (wklej) na CESGA - Maxima on line
źródło
Python, 43 bajty
Bezpośrednia formuła ze złotym współczynnikiem
g
. Dziękif
powyższej funkcji:Ta sama długość alt, tylko aliasing pierwiastka kwadratowego z 5:
Nie widziałem sposobu, aby stworzyć funkcję rekurencyjną, która mogłaby z nimi konkurować. Łagodna próba golfa dla 57 bajtów:
Dla porównania, metoda iteracyjna (60 bajtów w Pythonie 2):
Lub dla 58 bajtów:
źródło
JavaScript (ES6), 42 bajty
Test
Pokaż fragment kodu
źródło
MATL ,
119 bajtówCieszę się, że naDzięki @LuisMendo za -2 bajty =)[3,2]
pewno można grać w golfa, jeśli ktoś zna sposób, proszę dać mi znać =) (To też zadziała[1,3]
.)Jest to takie samo podejście jak w przypadku odpowiedzi Octave . Ale generowanie macierzy
po prostu Conver numer
3
i2
od dziesiętnej na binarną (tzn11
a10
).Wypróbuj online!
źródło
JavaScript (ES7) 37 bajtów
Używa Formuły Bineta .
To daje liczbę
n
th Fibonacciego + -0.0000000000000005
.źródło
**
wymaga ES7.1-p
zamiast-1/p
powinno działać dla tej samej oszczędności.Jolf, 2 bajty
Wypróbuj tutaj!
Wbudowane fibonacciego, zaimplementowane przy użyciu
phi
formuły.źródło
Haskell, 51 bajtów
źródło
,
zamiast&&
:even z,z<0
.PowerShell , 112 bajtów
Połączenie demo:
Wyjście z wersji demonstracyjnej:
źródło
Lithp , 88 bajtów
Moje spojrzenie na wszystkie te nawiasy .
Wypróbuj online!
Naprawdę niezbyt małe. Obecnie występuje błąd analizowania, który wymaga użycia
(get N)
lub(+ N)
zamiast po prostuN
. Wybrałem mniejszy. Nie sądzę jednak, aby można było coś takiego zrobić w golfa.źródło