Une séquence Sumac commence par deux entiers: t 1 et t 2 .
Le terme suivant, t 3 , = t 1 - t 2
Plus généralement, t n = t n-2 - t n-1
La séquence se termine lorsque t n <0.
Votre défi: écrire un programme ou une fonction qui imprime la longueur d'une séquence Sumac, en commençant par t 1 et t 2 .
- t 1 et t 2 sont des entiers dans la plage de votre langue.
- Des échappatoires standard s'appliquent.
Cas de test
t1 t2 sumac_len(t1,t2)
120 71 5
101 42 3
500 499 4
387 1 3
Bonus de rue bonus:
3 -128 1
-314 73 2
C'est le code-golf, donc la réponse la plus courte en octets l'emporte.
code-golf
sequence
arithmetic
SIGSTACKFAULT
la source
la source
t1
ett2
en entrée? Et qu'est-ce quei
dans les cas de test?t_1 = t_2 = 0
? Est-ce que le «crédit de rue bonus» signifie que nous n'avons pas à gérert_1 < 0
out_2 < 0
?Réponses:
Husk , 8 octets
Prend l'entrée comme une liste à 2 éléments. Essayez-le en ligne!
Explication
la source
Haskell , 22 octets
Essayez-le en ligne!
Je souhaite vraiment qu'il y ait un moyen de faire correspondre un motif à un nombre négatif ...
Explication
la source
Husk ,
1211 octetsEssayez-le en ligne!
Prend le crédit de rue bonus pour tout ce qui vaut.
Explication
la source
Rubis , 29 octets
Essayez-le en ligne!
la source
a<b=a-a=b
... Comment Ruby analyse cela ..?MATL , 13 octets
Cela gère les entrées négatives (deux derniers cas de test).
Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
la source
Brain-Flak ,
14290 octetsEssayez-le en ligne!
Pas très court. Prend l'entrée en arrière.
Explication
la source
05AB1E , 11 octets
Essayez-le en ligne!
Explication
Prend l'entrée comme
t2, t1
la source
Mathematica, 55 octets
Essayez-le en ligne!
et maintenant l'approche ennuyeuse régulière de @totallyhuman
Mathematica, 25 octets
Essayez-le en ligne!
la source
#1
pour#
J , 22 octets
Comment ça fonctionne:
Essayez-le en ligne!
la source
C (gcc) ,
322726 octets-5 octets grâce à l'abus totalement humain de gcc (semble fonctionner aussi sur tcc)
-1 octet grâce à PrincePolka
Essayez-le en ligne!
la source
Python 2 , 29 octets
Essayez-le en ligne!
Renvoie True au lieu de 1 .
la source
JavaScript (ES6), 24 octets
Renvoie vrai au lieu de 1 .
Cas de test
Afficher l'extrait de code
la source
f(b)(a-b)
d'économiser.a<0
? (1 de plus à parcourir)Pyth , 11 octets
Il s'agit d'une fonction récursive qui prend deux arguments,
G
etH
. Le lien est légèrement modifié afin d'appeler réellement la fonction sur l'entrée donnée.Suite de tests.
la source
APL (Dyalog) , 23 octets
Essayez-le en ligne!
Comment?
2∘
- avec un accumulateur initial de 2,-/⍵
- si le prochain mandat0>
- est inférieur à 0,⍺
- retourner l'accumulateur. autrement,(⍺+1)
- augmenter l'accumulateur∇
- et recurse avec-⍨\⌽⍵
- les deux derniers éléments inversés et différenciés.la source
Java (OpenJDK 8) , 44 octets
Essayez-le en ligne!
Itératif le plus court que j'ai trouvé (50 octets)
Essayez-le en ligne!
la source
dc , 24 octets
Essayez-le en ligne!
Explication
la source
Assemblage Z80, 10 octets
Cette version tente de faire la version "street cred" de la tâche. Cependant, pour le cas de test suggéré où t1 = -314, t2 = 73, ce programme produit la réponse "0", ce qui, franchement, a un peu plus de sens que "2".
Le programme de test pour ZX Spectrum 48K écrit à l'aide de l'assembleur Sjasmplus peut être téléchargé ici . Un instantané compilé est également disponible .
la source
Loop: ret c
place?2
résultat est vraiment juste une chose avec mon programme.0
c'est une réponse acceptable pour ce cas de test? Ou voulez-vous dire qu'il serait préférable de modifier mon programme en sortie2
?Java (OpenJDK 8) ,
8575 octetsEssayez-le en ligne!
non golfé:
la source
Lisp commun,
5942 octetsEssayez-le en ligne!
la source
Perl 6 ,
2419 octets-5 octets grâce à Brad Gilbert b2gills.
Essayez-le en ligne!
Explication : le tout entre parenthèses est exactement la séquence en question (
|@_
sont les 2 premiers termes (= les deux paramètres),*-*
est une fonction qui prend deux arguments et renvoie leur différence, et* <0
est la condition d'arrêt (terme inférieur à 0) Nous omettons le dernier terme avec^
après le...
). Nous forçons ensuite le contexte numérique par l'+
opérateur, ce qui donne la longueur de la séquence.la source
{+(|@_,*-*...^0>*)}
* <0*, but why you don't need it in
0> * `...%h<a>