Sekwencja sumaka zaczyna się od dwóch liczb całkowitych: t 1 it 2 .
Następny termin, t 3 , = t 1 - t 2
Mówiąc bardziej ogólnie, t n = t n-2 - t n-1
Sekwencja kończy się, gdy t n <0.
Twoje wyzwanie: Napisz program lub funkcję, która wypisze długość sekwencji Sumaka, zaczynając od t 1 it 2 .
- t 1 it 2 są liczbami całkowitymi z zakresu twojego języka.
- Obowiązują standardowe luki.
Przypadki testowe
t1 t2 sumac_len(t1,t2)
120 71 5
101 42 3
500 499 4
387 1 3
Bonus uliczny kredytowy:
3 -128 1
-314 73 2
To jest golf golfowy, więc wygrywa najkrótsza odpowiedź w bajtach.
code-golf
sequence
arithmetic
SIGSTACKFAULT
źródło
źródło
t1
it2
jako wkład? A co jesti
w przypadkach testowych?t_1 = t_2 = 0
? Czy „bonusowa uliczna ulga” oznacza, że nie musimy sobie radzić,t_1 < 0
czyt_2 < 0
?Odpowiedzi:
Łuska , 8 bajtów
Pobiera dane wejściowe jako listę 2-elementową. Wypróbuj online!
Wyjaśnienie
źródło
Haskell , 22 bajty
Wypróbuj online!
Naprawdę chciałbym mieć sposób na dopasowanie wzorca dla liczby ujemnej ...
Wyjaśnienie
źródło
Łuska ,
1211 bajtówWypróbuj online!
Bierze bonus uliczny za cokolwiek, co jest warte.
Wyjaśnienie
źródło
Ruby , 29 bajtów
Wypróbuj online!
źródło
a<b=a-a=b
... Jak Ruby analizuje to ...?MATL , 13 bajtów
Obsługuje negatywne dane wejściowe (dwa ostatnie przypadki testowe).
Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
źródło
Brain-Flak ,
14290 bajtówWypróbuj online!
Niezbyt krótki. Cofa dane wejściowe do tyłu.
Wyjaśnienie
źródło
05AB1E , 11 bajtów
Wypróbuj online!
Wyjaśnienie
Pobiera dane wejściowe jako
t2, t1
źródło
Mathematica, 55 bajtów
Wypróbuj online!
a teraz regularne nudne podejście @totallyhuman
Mathematica, 25 bajtów
Wypróbuj online!
źródło
#1
do#
J , 22 bajty
Jak to działa:
Wypróbuj online!
źródło
C (gcc) ,
322726 bajtów-5 bajtów dzięki nadużywaniu gcc przez całkowicie ludzkie (wydaje się, że działa również na tcc)
-1 bajtów dzięki PrincePolka
Wypróbuj online!
źródło
Python 2 , 29 bajtów
Wypróbuj online!
Zwraca wartość True zamiast 1 .
źródło
JavaScript (ES6), 24 bajty
Zwraca true zamiast 1 .
Przypadki testowe
Pokaż fragment kodu
źródło
f(b)(a-b)
oszczędzania.a<0
? (Pyth , 11 bajtów
Jest to funkcja rekurencyjna, która przyjmuje dwa argumenty
G
iH
. Link jest nieco zmodyfikowany, aby faktycznie wywołać funkcję na danym wejściu.Zestaw testowy.
źródło
APL (Dyalog) , 23 bajty
Wypróbuj online!
W jaki sposób?
2∘
- z początkowym akumulatorem 2,-/⍵
- jeśli następny semestr0>
- jest poniżej 0,⍺
- zwróć akumulator. Inaczej,(⍺+1)
- zwiększyć akumulator∇
- i powróć do-⍨\⌽⍵
- ostatnie dwa elementy zostały odwrócone i zróżnicowane.źródło
Java (OpenJDK 8) , 44 bajty
Wypróbuj online!
Najkrótsza iteracyjna, jaką znalazłem (50 bajtów)
Wypróbuj online!
źródło
dc , 24 bajty
Wypróbuj online!
Wyjaśnienie
źródło
Zespół Z80, 10 bajtów
Ta wersja próbuje wykonać zadanie typu „street cred”. Jednak w sugerowanym przypadku testowym, w którym t1 = -314, t2 = 73, program ten generuje odpowiedź „0”, co, szczerze mówiąc, ma nieco więcej sensu niż „2”.
Program testowy dla ZX Spectrum 48K napisany przy użyciu asemblera Sjasmplus można pobrać tutaj . Dostępna jest również skompilowana migawka .
źródło
Loop: ret c
zamiast tego korzysta wersja bez premii ?2
wynik jest tak naprawdę rzeczą z mojego programu.0
jest to akceptowalna odpowiedź dla tego przypadku testowego? Czy masz na myśli, że lepiej byłoby zmodyfikować mój program tak, aby wyświetlał dane wyjściowe2
?Java (OpenJDK 8) ,
8575 bajtówWypróbuj online!
bez golfa:
źródło
Common Lisp,
5942 bajtówWypróbuj online!
źródło
Perl 6 ,
2419 bajtów-5 bajtów dzięki Brad Gilbert b2gills.
Wypróbuj online!
Objaśnienie : Całą rzeczą w nawiasach jest dokładnie ta sekwencja (
|@_
są to pierwsze 2 warunki (= dwa parametry),*-*
jest funkcją, która pobiera dwa argumenty i zwraca ich różnicę, i* <0
jest warunkiem zatrzymania (termin mniejszy niż 0) Pomijamy ostatni termin^
po...
). Następnie wymuszamy kontekst liczbowy przez+
operatora, co daje długość sekwencji.źródło
{+(|@_,*-*...^0>*)}
* <0*, but why you don't need it in
0> * `...%h<a>