Człowiek z gwiazd ma przyjść na Ziemię! Na szczęście prezydent Stanów Zjednoczonych Donald Trump ma nieskończoną śmierć. Korzystając z tej kości, może wyczarować liczbę, którą ty , burmistrz Podunk , musisz użyć, aby ustalić, kto powinien zostać wysłany, aby zatrzymać najeźdźcę! Ale bądź ostrożny, możesz wysłać tylko ograniczoną liczbę bajtów z tyłu swojej żaby !
Biorąc pod uwagę dane wejściowe od użytkownika (która będzie dodatnią liczbą całkowitą), musisz zwrócić ciąg w zależności od kategorii, w której znajduje się liczba.
- Jeśli liczba jest liczbą Fibonacciego , musisz podać Ness .
- Jeśli liczba jest liczbą Lucas , musisz podać Lucas .
- Jeśli numer jest zarówno liczba Lucas i liczb Fibonacciego , należy wyjście Travis .
- Jeśli numer jest ani aa liczba Lucas ani liczb Fibonacciego , należy wyjście Pippi .
Przykłady
Oto kilka przypadków testowych:
1 => Travis 2 => Travis 3 => Travis 4 => Lucas 5 => Ness 6 => Pippi 7 => Lucas 8 => Ness 610 => Ness 722 => Pippi 843 => Lucas
Zasady
- To jest gra w golfa , wygrywa najkrótsza odpowiedź w bajtach.
- Twój program może być pełnym programem lub (anonimową) funkcją.
Bonusy
Istnieje kilka bonusów, których możesz użyć, aby pomóc swojej żabie szybciej przekazywać dane prezydentowi Trumpowi:
- W przypadku
-15
bajtów: jeśli liczbą wejściową jest2016
, musisz wyprowadzać daneTrump
, ponieważ jest on u szczytu swojej prezydentury.
0, 1
a inne zaczynają od1, 1
, uważam, że zależy to od użytej definicji. Często zdarza się, że liczby Lucasa zaczynają się2, 1
, np. OEIS ma obie wersje ( 1 , 2 ), ale ta, która zaczyna się od 2, jest fazą definicji.Odpowiedzi:
Pyth, 59-15 = 44 bajty
lub 42 bajty po naprawieniu błędu
Hexdump:
Pierwsze dwa znaki (
&Q
) są konieczne ze względu na błąd analizowania Pyth, który pojawia sięQ
po."
awarii. Poprawka została zastosowana. Jeśli interpreter po usunięciu błędu jest dozwolony, -2 bajty.Bez nieczytelnej kompresji ciągów:
Pyth, 63-15 = 48 bajtów
49 bajtów bez Trumpa
Pakiet testowy
Całkiem proste, wystarczy wygenerować sekwencje, powielić jedną i sprawdzić członkostwo.
Sekwencje są generowane, zaczynając od
[1, 2]
i[2, 1]
, a następnie stosując regułę Fibonacciego.źródło
Julia,
146142121120 bajtówTworzy to nienazwaną funkcję, która zwraca wartość logiczną. Aby to nazwać, nadaj mu nazwę, np
f=n->...
.Nie golfowany:
Naprawiono problem i zapisano 7 bajtów dzięki Glen O!
źródło
Mathematica
143156-15 (bonus) = 141 bajtówZ 2 bajtami zapisanymi dzięki LegionMammal978.
źródło
False
iTrue
mogą być zastąpione1<0
i1>0
odpowiednio.Mathematica,
9287 bajtówZainspirowany odpowiedzią Sp3000 .
źródło
Python 2, 107
Kluczem są dwa czysto arytmetyczne kontrole liczb Fibonacciego i Lucasa:
n
jest liczbą Fibonacciego dokładnie czy5*n*n+4
czy5*n*n-4
jest kwadratemn
jest liczbą Lucas dokładnie czy5*n*n+20
czy5*n*n-20
jest kwadratemTa strona ma szkice próbne .
Zatem wynik zależy od wartości
5*n*n+i
fori
w{4,-4,20,-20}
. Funkcjaf
sprawdza wartośći
, sprawdzając, czy odpowiadająca jej wartość nie ma pierwiastka kwadratowego z liczby całkowitej. Maabs
to na celu uniknięcie błędu polegającego na przyjęciu pierwiastka z wartości ujemnejn=1, i=-20
.Funkcja
f
pobiera wartość liczbyn
do przetestowania ze STDIN. Python ocenia to tylko raz, a nie raz na wywołanie funkcji.To, czy liczba nie jest Fibonacciego, jest oceniane jako
f(4)*f(-4)
użycie niejawnej konwersji wartości logicznej na liczbę i podobnie nie dla Lucasa, i brany jest odpowiedni ciąg. Gdyby dozwolone były spacje końcowe, przeplatanie ciągów byłoby krótsze.źródło
Python 2, 117 bajtów
Dla listy ciągów
"Pippi Lucas Ness Travis".split()
ta sama długość.źródło
CJam,
585554 bajtówNaiwne podejście do generowania liczb Fibonacciego i Lucasa, a następnie liczenie wystąpień w obu przypadkach, konwertowanie na binarne i wybieranie odpowiedniego ciągu.
Wypróbuj online .
źródło
Poważnie, 69 bajtów
Przed tym wyzwaniem Poważnie miał wbudowane
f
(indeks liczb Fibonacciego, -1 jeśli nie liczba Fibonacciego) ... ale nie indeks na liście lub „jest na liście”! (Od tego czasu został dodany jakoí
.)W rezultacie wydaje mi się to, czy dane wejściowe to liczba Fibonacciego:
Oto, co spędzam, generując listę liczb Lucasa:
I to właśnie spędzam na poszukiwaniu, czy dane wejściowe znajdują się na liście liczb Lucasa:
Jest to ciąg formatowany za pomocą notacji% Pythona w coś podobnego
:610:=
i konwertowany na funkcję, która jest następnie mapowana na tablicę i sumowana. (Liczby Lucas są unikalne, więc suma wynosi zawsze 0 lub 1.)Dzięki @Mego za ten ostatni bit z formatowaniem łańcucha.
źródło
Perl,
133(146-15 =) 131(144-15 =) 129(136-15 =) 121 bajtów+1 bajt dla
-n
flagi.Z nowymi wierszami po średnikach, dla czytelności:
Próbny:
Wydziwianie:
Można się zastanawiać, dlaczego moje zmienne są nazwane$a
,$b
,$%
, i$d
. To doskonałe pytanie! W rzeczywistości pozwala mi to zapisać bajt.jest o jeden bajt krótszy niż
Nie ma to już zastosowania, ponieważ zmieniłem kod w golfa, zmieniając układ rzeczy, powodując, że zmiana nazwy zmiennej nie zapisuje już bajtów. Zmieniłem to z powrotem, aby nazwy zmiennych znów miały sens.$_-2?$f+$l*2:3
jest raczej interesujący. Zasadniczo musiałem wprowadzić specjalny przypadek2
dla liczb Lucasa, ponieważ mój program sprawdza, czy liczba jest liczbą Lucasa po „aktualizacji” liczb Fibonacciego i Lucasa. Tak więc2
uznano go za liczbę inną niż Lucas.$_-2?foo:bar
jest char krótszy niż$_==2?bar:foo
. To samo służy do2016
testu.Nie jest to już prawdą, ponieważ udało mi się zrestrukturyzować program tak, aby nie wymagał specjalnej obudowy
2
. Ale nadal używam$_-2016?stuff:Trump
zamiast$_==2016?Trump:stuff
, który jest o jeden bajt dłuższy.Mówiąc o tym, być może zastanawiasz się, jak przeprowadziłem tę restrukturyzację. Właśnie zmusiłem program do wykonania 9 razy więcej iteracji, niż to konieczne, co kosztuje tylko 2 bajty (
*9
), ale pozwala mi na dokonywanie założeń gdzie indziej, które pomagają w golfie.Ponieważ zmienne mają domyślnie zero,
jest krótszy niż
Perl obsługuje słowa bez słów, więc nie muszę cytować żadnego z moich ciągów (\ o /).
źródło
-n
flagą (jak zaznaczono w odpowiedzi).-n
flaga?while(<>) { ... }
pętlę wokół twojego programu. Zobacz: Dokumenty Perla .Julia,
101100 bajtówNie golfowany:
źródło
{}
alternatywna składniaAny[]
jest przestarzała; zaoszczędziłoby to kilka bajtów.Oktawa, 93 bajty
To podejście jest podobne do mojej odpowiedzi MATLAB, z tym wyjątkiem, że Octave pozwala na indeksowanie bezpośrednio do nowej tablicy:
źródło
MATL (niekonkurencyjny),
575554(67-15) = 52 bajtyWypróbuj online!
Wyjaśnienie
Znów podobna logika do moich innych odpowiedzi tu i tutaj .
źródło
C ++ 11, 176 + 15 (#include) = 191
Nieprzyzwyczajony do użytkowania. Mogę dodać wyjaśnienie, jeśli jutro zostanie o to poproszony, gtg do łóżka już teraz!
źródło
JavaScript (ES6), 108 bajtów
Ta sama funkcja dla Fibonnacciego i Lucasa. Jest to funkcja rekurencyjna, która przyjmuje dwie pierwsze wartości jako init.
źródło
Java, 151 bajtów
Można argumentować, że Trump nigdy nie zleciłby tej kluczowej decyzji, więc nie musielibyśmy upubliczniać tej metody, oszczędzając kolejne 7 bajtów.
Niegolfowany, w tym wywołanie testu głównego
Jak dotąd nie znalazłem sposobu na przetestowanie w 2016 roku i zwrócenie „Trump” w kodzie, który ma mniej niż 15 bajtów w kodzie.
źródło
C (gcc) ,
128120116110 bajtówWypróbuj online!
Wyjaśnienie
Nazwijmy
F(n)
n-tą liczbę Fibonacciego iL(n)
n-tą liczbę Lucasa.a
,b
SąF(n-1)
,F(n)
odpowiednio.Następnie możemy obliczyć
L(n) == F(n-1)+F(n+1) == 2*F(n-1) + F(n) == 2*a+b
Ta funkcja będzie kolejno obliczać liczby Fibonacciego i Lucasa, aż do
n
, i sprawdzi, czyn
którykolwiek z nich.Jeśli
n
jest liczbą Fibonacciego, pierwszy bito
zostanie ustawiony na1
Jeśli
n
jest liczbą Lucas, drugi bito
zostanie ustawiony na1
o
, a następnie zostanie użyty do określenia, która nazwa ma zostać wyprowadzonaEdytować
a<b<c
ia<a+c=L(n)
tak dalej( b<=n || a+c<=n ) => a<n
. Naprawdę potrzebowałema<=n
poprawnie obsługiwaćn=1
c
równejF(n+1)
, co było bezużyteczne, ponieważ możemy już obliczyć zaF(n+1)
pomocąa
ib
źródło
b+=a
zamiastb=a+b
Perl 5.10, 119-15 (bonus) = 104 bajty
Nie golfowany:
Wykorzystuje to fakt, że
jest największą liczbą Lucasa niższą lub równą F (n).
źródło
Groovy, 149 bajtów
Kod testowy:
g
jest zamknięciem, które generuje listę liczb na podstawie seed (s
) i wartości maksymalnej (m
).(g(i,[1,1]).contains(i)?1:0)+(g(i,[2,1]).contains(i)?2:0)
znajduje indeks do użycia na podstawie liczby lucas lub fibonacci.źródło
MATLAB,
122119 bajtówKrótkie wyjaśnienie
My najpierw utworzyć tablicę zawierającą wartości komórek do wydrukowania:
{'Pippi', 'Lucas', 'Ness', 'Travis'}
. Następnie, aby dowiedzieć się, którą wartość wyświetlić, sprawdzamy, czyn
jest to liczba Fibonacciego czy Lucasa.W przypadku Fibonnaci stosujemy następującą formułę:
To sprawdza, czy albo
5*n^2 + 4
czy5*n^2 - 4
są idealnym kwadratem. Jeśliany
z nich są, to jest to liczba Fibonacciego.Wzór na liczbę Lucasa jest bardzo podobny, z tym wyjątkiem, że używamy +/- 20 zamiast 4:
W tym rozwiązaniu połączyłem te dwa przypadki w jeden przy użyciu macierzy:
Stosując to samo równanie jak powyższe, ale zmuszając
any
do rozważenia tylko pierwszego wymiaru, otrzymuję dwuelementową logiczną tablicę, w której jeśli pierwszym elementem jesttrue
, to jest to liczba Lucasa, a jeśli drugim elementem jesttrue
liczba Fibonacciego .Następnie, aby obliczyć indeks do mojej początkowej tablicy komórek, traktuję to jako sekwencję binarną, wykonując mnożenie elementarne tego logicznego za pomocą
[2^0, 2^1]
lub po prostu[1,2]
. I zsumuj elementy. Oczywiście muszę dodać 1 z powodu indeksowania opartego na jednym pliku MATLAB.Następnie muszę użyć
subsref
isubstruct
zaindeksować do początkowej tablicy komórek, aby uzyskać końcowy wynik.źródło
JavaScript (ES6), 97 bajtów
a==1
Wyboru jest potrzebny inny sposób nie zauważyć, że 1 jest liczbą Lucas.źródło
Galaretka , 47 bajtów - 15 = 32 (niekonkurujące ...?)
Wypróbuj online!
źródło
05AB1E ,
3937 ( 52–15 premii) bajtówWypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło