Wydaje się, że nie ma jeszcze konkursu na ten.
Zadanie jest proste. Dodaj pierwsze n
liczby sekwencji Fibonacciego, które są parzyste, i wyślij wynik.
Jest to podane przez OEIS A099919 , z tą różnicą, że sekwencja jest przesunięta o jeden, zaczynając od fib(1) = 0
zamiast fib(1) = 1
.
To jest kod golfowy. Wygrywa najniższa liczba bajtów.
Przykłady
n sum
1 0
2 2
3 10
4 44
5 188
6 798
7 3382
8 14328
9 60696
code-golf
number-theory
fibonacci
dfernan
źródło
źródło
Odpowiedzi:
Oaza ,
875 bajtów1 bajt zapisany dzięki @ETHProductions i 2 kolejne zapisane dzięki @Adnan!
Wypróbuj online!
Wyjaśnienie:
Używa tej samej formuły powtarzalności, co moja odpowiedź MATL.
źródło
U
w kodzie jest zastąpiony00
, czy to może zaoszczędzić bajt?4*
zez
i2+
ze»
:)Python, 33 bajty
Wypróbuj online
Magiczna formuła!
źródło
a(n) = (-10 + (5-3*sqrt(5))*(2-sqrt(5))^n + (2+sqrt(5))^n*(5+3*sqrt(5)))/20
(Colin Barker, 26 listopada 2016 r.) Ze strony OEISPython 2 , 35 bajtów
Wypróbuj online!
źródło
Właściwie 6 bajtów
Wypróbuj online!
Wyjaśnienie:
Co trzecia liczba Fibonacciego (począwszy od
F_0 = 0
) jest parzysta. Tak więc, pierwszen
numery parzyste Fibonacciego sąF_{i*3}
dlai
w[0, n)
.źródło
JavaScript (ES6), 27 bajtów
Rekurencja na ratunek! Wykorzystuje to jedną z formuł na stronie OEIS:
(ale przesunięty o jeden, ponieważ wyzwanie przesuwa go o jeden)
źródło
Pyke, 6 bajtów
Wypróbuj tutaj!
źródło
Perl 6 ,
38 3532 bajtówSpróbuj
Spróbuj
Spróbuj
Rozszerzony:
źródło
Oktawa ,
363533 bajtówWypróbuj online!
Wyjaśnienie
Ta anonimowa funkcja implementuje równanie różnicy
a(n) = 4*a(n-1)+a(n-2)+2
jako filtr rekurencyjny :W naszym przypadku
A = [1 -4 -1]
,B = 2
i wejściex
powinno być wektorem jedności, a wynik pojawi się jako ostatni wpis wynikuy
. Jednak ustawiamy0
na pierwszą wartość wejścia, tak aby inicjał0
pojawiał się na wyjściu, zgodnie z wymaganiami.'FAD'-69
jest po prostu krótszym sposobem na wytworzenie wektora współczynnikaA = [1 -4 -1]
; i(1:n)>1
wytwarza wektor wejściowyx = [0 1 1 ... 1]
.źródło
dc ,
2522 bajtówWypróbuj online!
Lub zapisz program w pliku i uruchom go, wpisując
Program przyjmuje nieujemną liczbę całkowitą n na stdin i wyświetla sumę pierwszych n parzystych liczb Fibonacciego na stdout. (Sekwencja Fibonacciego zaczyna się od 0, zgodnie z przykładami PO).
Ten program używa wzoru (F (3n-1) -1) / 2 do sumy pierwszych n parzystych liczb Fibonacciego, gdzie F jest zwykłą funkcją Fibonacciego, podaną przez F (0) = 0, F (1) = 1, F (n) = F (n-2) + F (n-1) dla n> = 2.
dc jest kalkulatorem stosowym. Oto szczegółowe wyjaśnienie:
W tym momencie liczba (1 + sqrt (5)) / 2 znajduje się na górze stosu.
W tym momencie 3n-1 znajduje się na górze stosu (gdzie n jest wejściem), a (1 + sqrt (5)) / 2 jest drugi od góry.
W tym momencie liczba na górze stosu to (((1 + sqrt (5)) / 2) ^ (3n-1)) / sqrt (5). Najbliższa liczba całkowita do tej liczby to F (3n-1). Zauważ, że F (3n-1) jest zawsze liczbą nieparzystą.
źródło
Mathematica,
2721 bajtówDzięki xnor za wskazanie alternatywnej formuły, alephalpha do korekty początkowego indeksu
źródło
(Fibonacci(3*n+2)-1)/2
formuła może być krótsza?MATL ,
1514 bajtówWypróbuj online!
Wyjaśnienie
Wykorzystuje to jedną z formuł rekurencyjnych z OEIS:
Dla wejścia N kod iteruje N razy, czyli 2 razy więcej niż to konieczne. To jest kompensowane przez ustawienie
0
,0
(zamiast0
,2
) jako wartości początkowych, a usuwając ostatnią otrzymaną wartość i wyświetlanie poprzedniego.źródło
Partia, 80 bajtów
Wykorzystuje fakt, że co trzecia liczba Fibonacciego jest parzysta, i po prostu oblicza je trzy na raz (obliczanie więcej niż jednej na raz jest w rzeczywistości łatwiejsze, ponieważ nie trzeba zamieniać wartości). Próbowałem
(Fibonacci(3*n+2)-1)/2
sformułowania, ale tak naprawdę jest on o kilka bajtów dłuższy (t+=
okazuje się być dość wydajny pod względem rozmiaru kodu).źródło
C,
823836 bajtów2 bajty zapisane dzięki @BrainSteel
Formuły na stronie OEIS znacznie skróciły:
Wypróbuj online!
82 bajty:
Pierwsza wersja ma 75 bajtów, ale tej funkcji nie można ponownie użyć, chyba że zawsze wywołujesz numer
f
większyN
niż poprzednie :-)Moja pierwsza odpowiedź tutaj. Nie sprawdziłem żadnych innych odpowiedzi ani OEIS. Sądzę, że jest kilka sztuczek, które mogę zastosować, aby skrócić :-)
źródło
a(n){return--n<1?0:4*a(n)+a(n-1)+2;}
Haskell (
3231 bajtów)Oszczędność jednego bajtu dzięki @ChristianSievers.
Korzystając ze wzoru podanego w OEIS:
a(n) = 4*a(n-1)+a(n-2)+2, n>1
Gary Detlefsa n|n>1=4*a(n-1)+a(n-2)+2|n<2=0
źródło
n<=1
liczb całkowitychn<2
. Ponadto, drugim warunkiem nie musi być negacja pierwszego (idiomatycznyotherwise
jest po prostuTrue
), więc zwykle w golfa1<2
stosuje się coś podobnego .Mathematica,
3227 bajtówPodziękowania dla Xnor . Zaoszczędź 5 bajtów dzięki JungHwan Min.
źródło
(Fibonacci(3*n+2) - 1)/2
napisać sumi?(* Vincenzo Librandi, Mar 15 2014 *)
, tak jak w OEIS.)R, 42 bajty
Rozwiązanie nierekurencyjne, w przeciwieństwie do wcześniejszego rozwiązania @rtrunbull tutaj .
Wykorzystuje właściwość, że każda trzecia wartość sekwencji Fibonacciego jest parzysta. Nadużywa również
F
domyślnie zdefiniowanego jakoFALSE=0
, pozwalając jako podstawa do dodania wartości.źródło
R,
4241 bajtówWcześniej miałem to nieciekawe rozwiązanie, korzystając z jednej z formuł z OEIS:
źródło
desctools::fibonacci
robinumbers::fibonacci
? Ponieważ ta mgła będzie nieco krótsza.bigz
, które*apply
klasa funkcji konwertuje na typ zraw
powodów ...Japt , 10 bajtów
Wypróbuj online!
Dzięki ETHproductions :)
źródło
PHP,
7370 bajtówprezentowanie zmiennych zmiennych . Na). Uruchom z
-nr
.awaria
Liczby są doskonale poprawnymi nazwami zmiennych w PHP.
Ale dla literałów wymagają aparatów ortodontycznych; tzn .
${0}
nie$0
.36 bajtów, O (1)
port odpowiedzi xnora
źródło
PARI / GP, 21 bajtów
\
jest ilorazem liczby całkowitej.źródło