Definicja
- a (1) = 1
- a (2) = 1
- a (n) = a (na (n-1)) + a (na (n-2)) dla n> 2, gdzie n jest liczbą całkowitą
Zadanie
Biorąc pod uwagę dodatnią liczbę całkowitą n
, wygeneruj a(n)
.
Przypadki testowe
n a(n)
1 1
2 1
3 2
4 3
5 3
6 4
7 5
8 5
9 6
10 6
11 6
12 8
13 8
14 8
15 10
16 9
17 10
18 11
19 11
20 12
Odniesienie
- Obowiązkowy OEIS A005185
code-golf
sequence
arithmetic
Leaky Nun
źródło
źródło
Odpowiedzi:
Retina ,
84837974 bajtyLiczba bajtów zakłada kodowanie ISO 8859-1.
Wypróbuj online! (Pierwszy wiersz włącza pakiet testowy oddzielony od linii).
Później będę musiał zagrać w golfa.
źródło
Haskell,
3533 bajtówDefiniuje funkcję
a
.źródło
(b.b)1+(b.b)2
byłoby krótsze niż suma?Julia, 29 bajtów
Wypróbuj online!
Jak to działa
Przedefiniowujemy jednoargumentowego operatora
!
do naszych celów.Jeśli n wynosi 1 lub 2 ,
n<3
zwraca wartość true i jest to nasza wartość zwracana.Jeśli n jest większe niż 2 ,
n<3
zwraca false, a || oddział zostaje wykonany. Jest to prosta implementacja definicji, w której~-n
daje n - 1 i~-~-n
daje n - 2 .źródło
Sesos, 54 bajty
Wypróbuj online
Zdemontowany
Lub w notacji Brainfuck:
źródło
C,
4342 bajtyZapisano 1 bajt dzięki @Dennis
Każda odpowiedź jest taka sama, muszę zrobić coś innego!
Wypróbuj online!
Objaśnienie: jest to w zasadzie,
a(n-a(n-2))+a(n-a(n-1))
ale z nieokreślonym zachowaniem swaggy (działa na moim telefonie (gcc) i ideone).źródło
1
między nimi?
a:
.$b+=$b[$_-$b[$_-2]]+$b[$_---$b[$_]]
Mathematica, 36 bajtów
Liczba bajtów zakłada 8859-1 kodowania ISO i Mathematica jest
$CharacterEncoding
ustawiony naWindowsANSI
(domyślne w systemie Windows, inne ustawienia mogą działać jak dobrze, ale niektóre, jakUTF-8
na pewno nie).Definiuje
±
jako jednoargumentowy operator.Próbowałem pozbyć się duplikacji, ale skończyłem z tą samą liczbą bajtów:
źródło
Galaretka ,
1514 bajtówWypróbuj online! lub sprawdź wszystkie przypadki testowe (zajmuje kilka sekund).
Jak to działa
źródło
Galaretka ,
141211 bajtówTo jest podejście iteracyjne.
Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
Python,
4540 bajtówProsta naiwna interpretacja wyzwania.
Zaoszczędź 5 bajtów dzięki @LeakyNun!
źródło
Haskell,
3937 bajtówdokładnie tak, jak opisano w wyzwaniu, używając strażników
źródło
n<3
dlah 2
być1
.R, 50 bajtów
Stosowanie:
źródło
CJam,
1918 bajtówWypróbuj online!
Wykorzystuje podejście iteracyjne.
źródło
C #,
5144 bajtówZastanawiam się, czy można to skrócić, czyniąc to anonimowymdzięki pinkfloydx33!źródło
int a(int n)=>n<3?1:a(n-a(n-a))+a(n-a(n-2));
-a
w pierwszym zestawie parens powinno być-1
JavaScript (ES6),
45 bajtów34 bajtówRozwiązanie rekurencyjne w ES6. Wszelkie wskazówki dotyczące gry w golfa są bardzo mile widziane.
Dziękujemy / u / ismillo za dalsze skrócenie.
źródło
Golfscript, 29 bajtów
Wypróbuj online!
źródło
05AB1E, 29 bajtów
Iteracyjne rozwiązanie.
Wypróbuj online
źródło
APL, 20 bajtów
Wyjaśnienie:
źródło
VBA Excel 87 bajtów
Brak rekurencji, ponieważ chcę, aby to działało dla n = 100000, powiedz:
... i naciśnij
return
(bajt # 87) na końcu wiersza, aby uzyskaćEnd Function
instrukcję „za darmo”. Zauważ, że wartości B są przesunięte o -1, aby uniknąć inicjalizacji dla n = 1 i 2.Wywoływaj w arkuszu kalkulacyjnym jak zwykle, np.
=A(100000)
Aby uzyskać48157
Wersja rekurencyjna, 61 bajtów ,
zaczyna robić się zbyt wolno dla n> 30 i nie można powiedzieć, że w ogóle działa dla n> 40.
źródło
Rubinowy, 36 bajtów
Bezpośrednie wdrożenie. Wszelkie sugestie dotyczące gry w golfa są mile widziane.
źródło
a[n-1]
, należy ją nazwać.Java 7,
686151 bajtów17 uratowanych dzięki Dziurawej Zakonnicy.
źródło
int a(int n){return n<3?1:a(n-a(n-2))+a(n---a(n));}
ale niestety używa tej samej ilości bajtów, co odpowiedź, którą już masz. Ponadto wskazałbym, że twoja odpowiedź jest w Javie 7, ponieważ odpowiedź Java 8 byłaby krótsza:n->return n<3?1:a(n-a(n-1))+a(n-a(n-2))
( 39 bajtów ) .Oaza ,
975 bajtów (niekonkurujące)Nie konkuruje , ponieważ język jest późniejszy niż wyzwanie. Dzięki Kenny Lau za uratowanie 4 bajtów. Kod:
Rozszerzona forma (
V
jest skrótem od11
):Kod:
Wypróbuj online! . Oblicza n = 1000 w 0,1 sekundy.
źródło
PowerShell v2 +,
857969 bajtówPobiera dane wejściowe
$n
, ustawia$b
się na tablicę@(1, 1)
, a następnie przechodzi do pętli2 .. $n
. Każdą iterację zajmujemy się$b
najnowszymi obliczeniami w sekwencji za pomocą prostej+=
i definicji sekwencji. Następnie wypisujemy odpowiednią liczbę z$b
(-1
ponieważ tablice w PowerShell są indeksowane zerowo). Działa$n
to, jeśli jest1
lub2
ponieważ obie te wartości są wstępnie wypełnione niższymi indeksami$b
od początku, więc nawet jeśli pętla pęka na śmieci, i tak jest ignorowana.Rozwiązanie rekurencyjne
7876 bajtówPo raz pierwszy użyłem odpowiednika lambda jako odpowiedzi, ponieważ zwykle iteracyjne rozwiązanie jest krótsze (jak widać ze wszystkich zagnieżdżonych części).
Ale w tym przypadku zagnieżdżone pareny są prawie zduplikowane w iteracyjnym rozwiązaniu z zagnieżdżonymi wywołaniami tablic, więc rozwiązanie rekurencyjne jest krótsze.Nie, iteracyjne rozwiązanie jest rzeczywiście krótsze (patrz wyżej).Wywołaj to przez operatora wykonania, na przykład
&$a 20
. Po prostu rekurencyjne połączenie.źródło
JavaScript (ES6), 66 bajtów
Wersja nierekurencyjna dla prędkości; wersja rekurencyjna jest prawdopodobnie krótsza, ale zostawię ją komuś innemu do napisania. Zawsze lubię to, kiedy mogę użyć
reduce
. Uwaga: 1 bajt zapisany przez zwrócenietrue
(który jest rzutowany na,1
gdy jest używany w kontekście liczb całkowitych) dlaa(1)
ia(2)
.źródło
Pyth, 16 bajtów
Definiuje funkcję
y
.Wypróbuj online (dodano,
yMS20
aby wydrukować pierwsze 20 wartości)źródło
Dalej 76 bajtów
W końcu to działa!
Wypróbuj online
Wyjaśnienie:
Wypróbuj online (nieco od golfa od góry)
Niestety, wzajemna rekurencja jest nieco zbyt trudna do użycia w golfa.
źródło
Klon,
4341 bajtówStosowanie:
Ten problem jest z pewnością dobrym kandydatem do zapamiętywania. Przy użyciu opcji pamięci podręcznej czasy uruchamiania są znacznie skrócone:
Można to zobaczyć za pomocą:
źródło
J,
2928 bajtówUżywa definicji rekurencyjnej.
Stosowanie
Dodatkowe polecenia są używane do formatowania wielu wejść / wyjść.
Wyjaśnienie
źródło
dc, 62 bajty
To rozwiązanie wykorzystuje tablice i rekurencję.
źródło
dc
, daj mi znać!Erlang, 46 bajtów
źródło
Lua, 59 bajtów
źródło