Vous connaissez probablement la séquence de Fibonacci où les deux premiers termes sont 0, 1
(ou parfois 1, 1
) et chaque terme suivant est la somme des deux précédents. Cela commence comme ceci:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
Parfois, la séquence contient des nombres qui ont un modèle particulier que je trouve intéressant: la différence entre n'importe quelle paire de chiffres adjacents est la même que n'importe quelle autre paire. Par exemple, dans la séquence commençant par 0, 1
, le 18e terme est 987
. 9-8=1
et 8-7=1
. Je suis légèrement satisfait.
Défi
Étant donné deux valeurs initiales F(0)
et F(1)
, sortez chaque nombre dans la séquence générée par F(n) = F(n-1) + F(n-2)
qui répond aux critères suivants:
- La différence entre n'importe quelle paire de chiffres adjacents est la même que toute autre paire
- Il comporte au moins trois chiffres (les nombres à 1 et 2 chiffres ne sont pas intéressants pour ce modèle)
Contribution
- Deux entiers non négatifs inférieurs à 10 ** 10 (10 milliards)
Production
- Tous les nombres entiers inférieurs à 10 ** 10 et répondant aux critères de la section Défi
- Il est acceptable de sortir des chiffres supérieurs à 10 ** 10 mais ce n'est pas une exigence
- Étant donné que les chiffres répétés correspondent au modèle (par exemple
777
), il est possible qu'il existe des nombres infinis qui répondent aux critères, mais votre programme n'est pas obligé de produire indéfiniment - S'il n'existe pas de tels entiers, affichez ce que vous voulez tant qu'il ne s'agit pas d'un nombre (rien, null, tableau vide, message d'erreur, visage triste, etc.)
- Si un nombre correspondant au modèle apparaît plusieurs fois dans la séquence, vous pouvez le sortir une ou autant de fois qu'il se produit
- Si une entrée répond aux critères, elle doit être incluse dans la sortie
Règles
- L'entrée et la sortie peuvent être dans n'importe quel format standard
- Les failles standard sont interdites
- C'est le code-golf donc le code le plus court en octets gagne
Exemples / cas de test
Input , Output
[1,10] , []
[0,1] , [987]
[2,1] , [123]
[2,3] , [987]
[61,86] , [147]
[75,90] , [420]
[34,74] , [1234]
[59,81] , [2468]
[84,85] , [7531]
[19,46] , [111]
[60,81] , [222]
[41,42] , [333]
[13,81] , [444]
[31,50] , [555]
[15,42] , [666]
[94,99] , [777]
[72,66] , [888]
[3189,826] , [888888888]
[15,3] , [159,258]
[22,51] , [321,1357]
[74,85] , [159,4444]
[27,31] , [147,11111]
[123,0] , [123,123,123,246,369]
[111,0] , [111,111,111,222,333,555,888]
[111,222] , [111,222,333,555,888]
[33345,692] , [987654321]
[3894621507,5981921703] , [9876543210]
[765432099,111111111] , [111111111,876543210,987654321]
[1976,123] , [123, 2222, 4321, 6543, 45678]
[1976, 123] -> [123, 2222, 4321, 6543, 45678]
,[3189, 826] -> [888888888]
,[33345, 692] -> [987654321]
Réponses:
MATL , 14 octets
Merci à Emigna d'avoir signalé une erreur, maintenant corrigée
Boucle infinie qui sort les nombres tels qu'ils sont trouvés.
Essayez-le en ligne! Notez que dans l'interpréteur en ligne, les résultats sont affichés après le délai d'attente de 1 minute.
Explication
Soit
F(n)
etF(n+1)
dénotons deux termes génériques consécutifs de la séquence de Fibonacci. Chaque itération de la boucle commence par la pile contenantF(n)
,F(n+1)
pour certainsn
.la source
05AB1E ,
171615 octetsEssayez-le en ligne!
Explication
la source
JavaScript (ES6),
858481 octetsEssayez-le en ligne!
Test des chiffres adjacents
Les deux x et d sont initialisés à une fonction anonyme, qui forces
NaN
pour toutes les opérations arithmétiques ils sont impliqués. La première itération desome()
donne toujours(d = [function] - n) === NaN
et(r = [function] - d) === NaN
(falsy). Sur la deuxième itération, nous avonsd = x - n
(un entier) et(r = NaN - d) === NaN
(encore une fausse). À partir de la troisième itération, r est défini sur un entier qui est différent de zéro si la différence entre le chiffre # 3 et le chiffre # 2 n'est pas égale à la différence entre le chiffre # 2 et le chiffre # 1.Le nombre p répond aux critères requis si et seulement si
some()
est faux (tous les chiffres adjacents ont la même différence) et la valeur finale de r est 0 (il y a eu au moins 3 itérations). Cela donne!false / 0 === true / 0 === Infinity
(véridique).Sinon, nous pouvons avoir:
!true / r
avec r> 0 ou r <0 , ce qui donnefalse / r === 0
(fausse)!false / NaN
, ce qui donnetrue / NaN === NaN
(fausse)Condition d'arrêt
La récursivité s'arrête lorsqu'elle est
p | q
évaluée à 0 . Cela peut se produire lorsque p et q atteignent des valeurs d'environ 10 25 qui sont longues de 84 bits. Parce que JS a 52 bits de mantisse, les 32 derniers bits sont mis à zéro. Ainsi, le OU au niveau du bit 32 bits est évalué à 0 .En raison du taux de croissance rapide de la séquence, cela se produit assez rapidement.
la source
Java 8,
151144140136 136130 octetsBoucle infinie produisant les nombres lorsqu'il les trouve.
Essayez-le en ligne (expire après 60 secondes).
Version de 136 octets avec 10 10 limites supplémentaires (
a<1e10
):Essayez-le en ligne.
Explication:
la source
Gelée ,
20 1918 octetsEssayez-le en ligne!
+ƝḢ;Ɗȷ¡
produit les mille (ȷ
) premiers termes de la série qui seront toujours suffisants. Je pense qu'il existe probablement un moyen plus court de procéder.+ȷ¡
se rapproche mais ne fonctionne que si le premier terme est nul.Je suppose que nous pouvons prendre les deux nombres en sens inverse, ce qui permet à un octet de
DIE
.Si nous ne sommes pas tenus de produire l'une des entrées:
Gelée , 15 octets
Essayez-le en ligne!
la source
DIEƊ
pendant le processus de golf.Octave ,
919083 octets7 octets enregistrés grâce à Luis Mendo!
Essayez-le en ligne!
Et bien ça marche!
eval
avec une boucle à l'intérieur pour économiser quelques octets. Ignorer les deux-points et les points-virgules pour en sauver quelques-uns. Utilise le fait qu'un vecteur est considéré comme véridique si tous les éléments ne sont pas nuls à enregistrerany
ouall
.En dehors de cela, c'est à peu près une implémentation simple de Fibonacci.
la source
Python 2 ,
10298 octetsEssayez-le en ligne!
Thx pour 4 octets de ovs
la source
Haskell , 105 octets
Définit l'opérateur
(%)
qui renvoie une liste infinie avec toutes les solutions. Pour voir le résultat sur stdout, nous devons désactiver la mise en mémoire tampon (ou l'exécuter dansghci
ou avecrunhaskell
), essayez-le en ligne!Explication / Non golfé
La fonction
f
est juste une fonction d'aide qui attend une fonction binaire et une liste, elle applique la fonctiong
à toutes les paires adjacentes. C'est essentiellement la même chose que:L'opérateur
(%)
est juste une compréhension de liste qui effectue un filtrage (en s'assurant qu'il y a au moins 3 chiffres et que les chiffres adjacents ont la même distance):la source
CJam , 55 octets
Essayez-le en ligne!
Ma première soumission CJam, pas très courte mais très amusante. Toutes les suggestions sont les bienvenues!
la source
Stax ,
2624 octetsExécuter et déboguer
Explication
Pas aussi court que je le voudrais et peut probablement être joué un peu plus, mais cela fonctionne.
la source
Rubis , 79 octets
Essayez-le en ligne!
la source
Julia 0,6 ,
8681 octetsEssayez-le en ligne!
Assez simple - vérifiez si l'entrée a au moins 3 chiffres (
n>99
), puis prenez la différence entre chaque paire de chiffres dans le nombre (diff(digits(n))
), vérifiez que la longueur de (endof
) un ensemble unique de (∪
) ces différences est 1 (c'est-à-dire toutes les différences sont les mêmes), et si oui, imprimez le numéro. Faites cela pour les deux nombres donnés, puis appelez récursivement la fonction avec les deux nombres suivants.(Malheureusement, il sembleSurcharge maintenant l'±
avoir une priorité plus élevée que+
, sinon l'appel final aurait pu êtrea+b±a+2b
, économisant 3 octets.)<
opérateur, économisant ainsi à la fois les octets de l'opérateur et les crochets de priorité. (Ne peut pas utiliser<
dans notre code, donc juste réorganiséendof(...)<2
en2>endof(...)
).Si une sortie étrangère est autorisée, nous pouvons économiser 2 octets en utilisant
@show
au lieu deprintln
, en imprimantn = 987
au lieu de simplement987
. Nous pourrions même utiliserdump
pour 1 octet inférieur à cela, maisdump
imprime les informations de type avec la valeur, donc la sortie seraInt64 987
au lieu de juste987
.la source