Niedawno utworzyłem własną sekwencję (zwaną sekwencją Piggyback) i działa ona tak:
P(1)
, P(2)
I P(3)
= 1
.
W każdym P(n)
przypadku n>3
sekwencja działa w następujący sposób:
P(n) = P(n-3) + P(n-2)/P(n-1)
Kontynuując sekwencję:
P(4)
= 1 + 1/1
=2
P(5)
= 1 + 1/2
= 3/2
=1.5
P(6)
= 1 + 2/(3/2)
= 7/3
=2.33333...
P(7)
= 2 + (3/2)/(7/3)
= 37/14
=2.6428571428...
P(8)
= 3/2 + (7/3)/(37/14)
= 529/222
=2.3828828828...
Twoim zadaniem jest n
obliczenie P(n)
albo jako liczby zmiennoprzecinkowej, albo jako (im) ułamek właściwy.
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach.
Jeśli ktoś może znaleźć nazwę sekwencji, odpowiednio zmodyfikuj post.
P(0)=1
...Odpowiedzi:
Python 2,
4039 bajtów.Daje
True
zamiast 1, jeśli nie jest to dozwolone, możemy mieć to dla 42 bajtów:Sposób, w jaki działa, jest dość prosty, jedyną sztuczką jest
.0+
rzucenie wyniku na float.źródło
x<4
ior
f(x-1.)
do rzutowania na pływaka. W Pythonie 3 nie musisz wcale rzucać.Haskel, 32 bajty
Przykład użycia:
((0#1)1!!) 7
->2.642857142857143
. Zaczynam sekwencję od0, 1, 1
naprawy!!
indeksowania opartego na 0.Edycja: @xnor znalazł sposób na przejście z indeksu opartego na 0 na indeks oparty na 1, bez zmiany liczby bajtów.
źródło
(0,1,1)
.Rubinowy, 34 bajty
Ponieważ Ruby domyślnie używa podziału na liczby całkowite, okazuje się, że zamiast tego ułamki są krótsze. Sugestie dotyczące gry w golfa mile widziane.
źródło
Perl 6 ,
2523 bajtówWyjaśnienie:
Zwraca Rat ( wymierne ) dla danych wejściowych zaczynających się od 3 w górę, aż wynik zacznie mieć mianownik większy niż może zmieścić się w 64-bitowej liczbie całkowitej, w którym to momencie zacznie zwracać Num s (zmiennoprzecinkowa).
Ostatni Szczur , który wróci, to
P(11) == 8832072277617 / 2586200337022
Jeśli chcesz, aby powrócić Rational raczej numery niż pływaków można zamienić go na następujących składników, które zwróci FatRat zamiast.
Test:
źródło
C, 46 bajtów
Ideone
źródło
MATL , 15 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Cheddar , 31 bajtów
Wersja bez golfa jest tak wyraźna, że nie potrzebujesz wyjaśnienia:
w zasadzie po argumentach funkcji możesz określić zmienną, która ma być używana, która będzie ustawiona na samą funkcję. Dlaczego? ponieważ ta funkcja będzie zoptymalizowana pod kątem ogonów, a przynajmniej powinna.
źródło
JavaScript (ES6), 31 bajtów
Prosta funkcja.
źródło
P=n=>n<4?1:P(n-3)+P(n-2)/P(n-1)
function
. BitP=n=>[...]
tworzy anonimową funkcję, która przyjmuje 1 parametr (n). Również w ES6 zwroty są niejawne. Tak,P=n=>5
to funkcja zawsze zwraca5
. Musisz obudować ciało{}
tylko, jeśli masz więcej niż jedną instrukcję (np .:)P=n=>{alert(1);console.log(1)}
. Ponieważ masz tylko 1 (dużą) instrukcję (operator potrójny), możesz zapomnieć o{}
.05AB1E ,
1817 bajtówWypróbuj online!
Zaoszczędzono 1 bajt dzięki Luisowi Mendo
źródło
Pyth, 20 bajtów
Wypróbuj online!
źródło
Galaretka , 15 bajtów
Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
R
5347 bajtówW tej odpowiedzi wykorzystano całkiem fajną funkcję
ifelse
:ifelse(Condition, WhatToDoIfTrue, WhatToDoIfNot)
źródło
return()
swojego kodu. Ale musisz także nazwać tę funkcję, aby rekursja zadziałałaMathematica, 36 bajtów
Oto kilka pierwszych warunków:
źródło
Dyalog APL, 25 bajtów
⊃{1↓⍵,⍎⍕' +÷',¨⍵}⍣⎕⊢0 1 1
źródło