Eine Sumachsequenz beginnt mit zwei ganzen Zahlen: t 1 und t 2 .
Der nächste Term, t 3 , = t 1 - t 2
Allgemeiner ist t n = t n-2 - t n-1
Die Sequenz endet, wenn t n <0 ist.
Ihre Herausforderung: Schreiben Sie ein Programm oder eine Funktion, die die Länge einer Sumachsequenz druckt, beginnend mit t 1 und t 2 .
- t 1 und t 2 sind ganze Zahlen im Bereich Ihrer Sprache.
- Es gelten Standardlücken.
Testfälle
t1 t2 sumac_len(t1,t2)
120 71 5
101 42 3
500 499 4
387 1 3
Bonus Street Cred:
3 -128 1
-314 73 2
Dies ist Code-Golf, also gewinnt die kürzeste Antwort in Bytes.
code-golf
sequence
arithmetic
SIGSTACKFAULT
quelle
quelle
t1
undt2
als Input nehmen? Und was isti
in den Testfällen?t_1 = t_2 = 0
? Bedeutet "Bonus Street Cred", dass wir nicht damit umgehen müssent_1 < 0
odert_2 < 0
?Antworten:
Schale , 8 Bytes
Nimmt die Eingabe als 2-Element-Liste auf. Probieren Sie es online aus!
Erläuterung
quelle
Haskell , 22 Bytes
Probieren Sie es online aus!
Ich wünschte wirklich, es gäbe eine Möglichkeit, eine Übereinstimmung für eine negative Zahl zu finden ...
Erläuterung
quelle
Schale ,
1211 BytesProbieren Sie es online aus!
Nimmt den Bonus Street Credit für alles, was es wert ist.
Erläuterung
quelle
Ruby , 29 Bytes
Probieren Sie es online aus!
quelle
a<b=a-a=b
... Wie analysiert Ruby das ..?MATL , 13 Bytes
Dies behandelt negative Eingaben (die letzten beiden Testfälle).
Probieren Sie es online aus! Oder überprüfen Sie alle Testfälle .
Erläuterung
quelle
Brain-Flak ,
14290 BytesProbieren Sie es online aus!
Nicht sehr kurz. Nimmt die Eingabe rückwärts auf.
Erläuterung
quelle
05AB1E , 11 Bytes
Probieren Sie es online aus!
Erläuterung
Nimmt Eingabe als
t2, t1
quelle
Mathematica, 55 Bytes
Probieren Sie es online aus!
und jetzt der regelmäßige langweilige Ansatz von @totallyhuman
Mathematica, 25 Bytes
Probieren Sie es online aus!
quelle
#1
um#
J , 22 Bytes
Wie es funktioniert:
Probieren Sie es online aus!
quelle
C (gcc) ,
322726 Bytes-5 Bytes dank des Missbrauchs von gcc durch totalhuman (scheint auch bei tcc zu funktionieren)
-1 Bytes dank PrincePolka
Probieren Sie es online aus!
quelle
Python 2 , 29 Bytes
Probieren Sie es online aus!
Gibt True anstelle von 1 zurück .
quelle
JavaScript (ES6), 24 Byte
Gibt true anstelle von 1 zurück .
Testfälle
Code-Snippet anzeigen
quelle
f(b)(a-b)
also keine Ersparnis.a<0
? (Noch 1)Pyth , 11 Bytes
Dies ist eine rekursive Funktion, die zwei Argumente akzeptiert,
G
undH
. Der Link wurde leicht modifiziert, um die Funktion für den angegebenen Eingang tatsächlich aufzurufen.Testsuite.
quelle
APL (Dyalog) , 23 Bytes
Probieren Sie es online aus!
Wie?
2∘
- mit einem anfänglichen Akkumulator von 2,-/⍵
- wenn die nächste Amtszeit0>
- liegt unter 0,⍺
- Akku zurückgeben. Andernfalls,(⍺+1)
- Akku erhöhen∇
- und mit zurückgreifen-⍨\⌽⍵
- Die letzten beiden Elemente wurden umgekehrt und differenziert.quelle
Java (OpenJDK 8) , 44 Bytes
Probieren Sie es online aus!
Kürzeste iterative fand ich (50 Bytes)
Probieren Sie es online aus!
quelle
Gleichstrom , 24 Bytes
Probieren Sie es online aus!
Erläuterung
quelle
Z80-Baugruppe, 10 Byte
Diese Version versucht, die "Street Cred" -Version der Aufgabe auszuführen. Für den vorgeschlagenen Testfall mit t1 = -314, t2 = 73 erzeugt dieses Programm jedoch die Antwort "0", was offen gesagt etwas sinnvoller ist als "2".
Das mit Sjasmplus Assembler geschriebene Testprogramm für ZX Spectrum 48K kann hier heruntergeladen werden . Ein kompilierter Schnappschuss ist ebenfalls verfügbar .
quelle
Loop: ret c
stattdessen?2
Ergebnis ist wirklich nur eine Sache mit meinem Programm.0
eine akzeptable Antwort für diesen Testfall ist? Oder meinst du, es wäre besser, mein Programm für die Ausgabe zu ändern2
?Java (OpenJDK 8) ,
8575 ByteProbieren Sie es online aus!
ungolfed:
quelle
Common Lisp,
5942 BytesProbieren Sie es online aus!
quelle
Perl 6 ,
2419 Bytes-5 Bytes dank Brad Gilbert b2gills.
Probieren Sie es online aus!
Erläuterung : Das Ganze in Klammern ist genau die betreffende Sequenz (
|@_
sind die ersten beiden Terme (= die beiden Parameter)),*-*
eine Funktion, die zwei Argumente akzeptiert und deren Differenz zurückgibt, und* <0
die Stoppbedingung (Term kleiner als 0). Wir lassen den letzten Begriff mit^
nach dem...
) weg . Wir erzwingen dann den numerischen Kontext durch den+
Operator, der die Länge der Sequenz ergibt.quelle
{+(|@_,*-*...^0>*)}
* <0*, but why you don't need it in
0> * `...%h<a>