Définissons la fonction a sur les nombres naturels , écrite en base 10 chiffres , comme suit:
Tant qu'il y a des chiffres adjacents égaux , remplacez-les par leur somme de gauche à droite. S'il y avait de tels chiffres, répétez la même procédure.
En d'autres termes, à chaque itération, nous prenons avidement toutes les paires de chiffres adjacents égaux et les remplaçons par leur somme en même temps (en utilisant la paire la plus à gauche si elles se chevauchent).
Exemple
Prenons par exemple:
- Les premiers chiffres adjacents qui sont égaux sont les deux
- On les remplace donc par ce qui nous donne
- Puisque nous sommes encore dans la première traversée gauche-droite et qu'il y avait encore deux s, nous devons d'abord les remplacer
- Nous obtenons donc
- Quelque chose a changé, nous devons donc refaire une itération
- Mais il n'y a pas de tels chiffres, alors nous nous arrêtons
Par conséquent, le nombre dans cette séquence est .
Défi
Les 200 premiers termes sont:
0,1,2,3,4,5,6,7,8,9,10,2,12,13,14,15,16,17,18,19,20,21,4,23,24,25,26,27,28,29,30,31,32,6,34,35,36,37,38,39,40,41,42,43,8,45,46,47,48,49,50,51,52,53,54,10,56,57,58,59,60,61,62,63,64,65,12,67,68,69,70,71,72,73,74,75,76,14,78,79,80,81,82,83,84,85,86,87,16,89,90,91,92,93,94,95,96,97,98,18,10,101,102,103,104,105,106,107,108,109,20,21,4,23,24,25,26,27,28,29,120,121,14,123,124,125,126,127,128,129,130,131,132,16,134,135,136,137,138,139,140,141,142,143,18,145,146,147,148,149,150,151,152,153,154,20,156,157,158,159,160,161,162,163,164,165,4,167,168,169,170,171,172,173,174,175,176,24,178,179,180,181,182,183,184,185,186,187,26,189,190,191,192,193,194,195,196,197,198,28
Votre tâche consiste à générer cette séquence, soit
- étant donné , retourner le nombre dans cette séquence,
- étant donné , retourne les premiers nombres de cette séquence
- ou générer la séquence indéfiniment.
Vous pouvez choisir votre soumission pour utiliser - ou indexation , mais veuillez préciser laquelle.
Cas de test
Vous pouvez utiliser les termes ci-dessus, mais en voici quelques-uns plus grands:
222 -> 42
1633 -> 4
4488 -> 816
15519 -> 2019
19988 -> 2816
99999 -> 18189
119988 -> 21816
100001 -> 101
999999 -> 181818
Python 2 ,
979693 octetsEssayez-le en ligne!
Version non regex:
Python 2 ,
133130122112 11298 octetsEssayez-le en ligne!
la source
Gelée , 11 octets
Il s'agit d'un programme complet inutilement lent.
Essayez-le en ligne!
Version alternative, 12 octets
Un octet de plus, mais beaucoup plus rapide. Fonctionne comme un programme ou une fonction.
Essayez-le en ligne!
Comment ça marche
La version à 11 octets fait de même, sauf qu'elle appelle le lien n fois pour l'entrée n , au lieu de l'appeler jusqu'à ce qu'un point fixe soit atteint.
la source
Haskell, 70 octets
L'entrée est considérée comme une chaîne.
Essayez-le en ligne!
la source
|x<-b:c=a:f x
ou mêmef(a:c)=a:f c
, au cas où l'un ou l'autre pourrait réellement conduire à une amélioration :)JavaScript,
484746 octetsEntrée et sortie sous forme de chaînes. Renvoie le
nth
terme de la séquence.Essayez-le en ligne
la source
x[0]*2
->x/5.5
Perl 6 , 37 octets
Essayez-le en ligne!
Il s'agit d'une fonction qui génère le nième terme de la séquence, donné n comme argument.
($_, { ... } ... * == *)
est la séquence de modifications successives du numéro d'entrée, générée par l'expression entre crochets (une simple substitution d'expression régulière) et s'arrêtant lorsque* == *
, c'est-à-dire lorsque les deux derniers nombres de la séquence sont égaux. Ensuite, le[*-1]
prend uniquement le dernier élément de cette séquence comme valeur de retour.la source
==*
et en le remplaçant*-1
par$_
, car il y a toujours moins den
remplacements pour un nombren
. 33 octetsRétine , 16 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explication:
Répétez jusqu'à ce que l'entrée cesse de changer.
Remplacez les paires de chiffres adjacents ...
... avec deux fois le chiffre. (
$1*
génère une chaîne de$1
_
s,2*
duplique cela et$.(
prend la longueur. En fait, le moteur Retina est plus intelligent que cela et double simplement$1
.)la source
C # (.NET Core) ,
231,203,200,196, 192 octetsEDIT: La fonction est maintenant à 185 octets plus 18 pour
using System.Linq;
Merci à BMO (pour 1> 0 étant égal à true plus suppression de nouvelle ligne) et à M. XCoder (pour les instructions f =! F)!
EDIT2: jusqu'à 182 octets plus 18 pour
using System.Linq
remercier Dana d'avoir partagé quelques conseils de golf!EDIT3: Merci à Embodiment of Ignorance pour l'int [] -> var, la suppression des courts-circuits && -> & et la modification de ToArray -> ToList! (178 octets + 18 en utilisant)
EDIT4: Incarnation de l'ignorance a chuté de 4 octets en modifiant une affectation. Dummy me shoulda counted! Merci encore: D
Essayez-le en ligne!
la source
Perl 5
-p
, 21 octetsEssayez-le en ligne!
la source
Japt v2.0a0
-h
,1514 octetsRenvoie le
nth
terme de la séquence.Essayez-le
Cela devrait fonctionner pendant 10 octets, mais il semble y avoir un bogue dans la méthode de remplacement récursif de Japt.
la source
Groovy , 63 octets
Essayez-le en ligne!
la source
05AB1E , 11 octets
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
Langue Wolfram 108 octets
Explication
IntegerDigits
transforme le numéro d'entrée en une liste de ses chiffres.Split
regroupe des chiffres répétés consécutifs.Partition[#, UpTo@2]&/@
décompose des séries de chiffres similaires en listes d'au plus 2 longueurs.Flatten[...,1]
élimine les accolades occasionnellement trop imbriquées - par exemple, {{2,2}} devient {2,2}Total/@
somme les totaux des chiffres appariés. Les chiffres isolés n'ont pas besoin d'être additionnés.ToString
convertit les totaux (et les chiffres isolés) en chaînes.""<>
joint toutes les chaînes de la liste.ToExpression
convertit le résultat en un entier....~FixedPoint~#&
applique la fonction jusqu'à ce que le résultat cesse de changer.la source
C # (Visual C # Interactive Compiler) avec indicateur
/u:System.Text.RegularExpressions.Regex
, 70 octetsSorties en modifiant l'entrée. Prend une liste contenant une chaîne pour l'entrée.
Merci à @dana d'avoir joué au golf pendant 23 octets!
Essayez-le en ligne!
la source
Nettoyer , 118 octets
Essayez-le en ligne!
Prend la première valeur répétée (
limit
) de la liste infinie d'applications (iterate
) d'un lambda effectuant une seule étape du processus d'effondrement. Entrée prise comme a[Char]
.la source
Rouge ,
848380 octetsEssayez-le en ligne!
Renvoie le
nth
terme de la séquence.Explication:
la source
Scala , 84 octets
Essayez-le en ligne!
la source
C # (Visual C # Interactive Compiler) , 111 octets
Essayez-le en ligne!
ÉNORME crédit à @ASCIIOnly pour avoir joué au golf ~ 30;) Au début, nous publions tous les deux des mises à jour simultanément, mais à un moment donné, il est clairement allé en ville!
-2 grâce à @EmbodimentOfIgnorance!
Moins de code golfé ...
la source
(s[i++]-48)*2
=>s[i++]*2-96