Un nombre triangulaire est un nombre qui peut être exprimé comme la somme d'entiers positifs consécutifs, à partir de 1. Ils peuvent également être exprimés avec la formule n(n + 1) / 2
, où n
est un entier positif.
La contrepartie numérique d'un nombre est calculée de la manière suivante:
- Divisez un nombre en un tableau de ses chiffres, par exemple
613 => [6 1 3]
- Pour chaque nombre du tableau, calculez le
n
nombre triangulaire;[6 1 3] => [21 1 6]
- Additionnez le tableau résultant;
[21 1 6] => 28
Votre tâche consiste, compte tenu d'un nombre entier n
, à calculer n
de façon répétée l'équivalent numérique de jusqu'à ce que le résultat soit égal à 1, puis à sortir toutes les valeurs qui ont été calculées. Vous pouvez afficher les valeurs dans n'importe quel ordre et avec une inclusion facultative du numéro d'origine au début du tableau. C'est un code-golf donc le code le plus court l'emporte.
Cas de test
23 => 9 45 25 18 37 34 16 22 6 21 4 10 1
72 => 31 7 28 39 51 16 22 6 21 4 10 1
55 => 30 6 21 4 10 1
78 => 64 31 7 28 39 51 16 22 6 21 4 10 1
613 => 28 39 51 16 22 6 21 4 10 1
8392 => 90 45 25 18 37 34 16 22 6 21 4 10 1
11111 => 5 15 16 22 6 21 4 10 1
8592025 => 117 30 6 21 4 10 1
999999999 => 405 25 18 37 34 16 22 6 21 4 10 1
141
et comporte desn
chiffres. La valeur maximale que son homologue numérique peut avoir est45n
, doncdigi-△(x) ≤ 45n < 45(1+log_10(x))
, et pourx > 141
, nous avons45(1+log_10(x)) < x
, doncdigi-△(x) ≤ x-1
pourx > 141
, et une fois que nous avons dépassé la141
limite, eh bien, nous prouvons la force brute via des programmes.Réponses:
Husk , 6 octets
Essayez-le en ligne!
Explication
la source
05AB1E ,
65 octetsEssayez-le en ligne! Edit: 1 octet enregistré grâce à @Emigna. Explication:
la source
€
parS
, vous pouvez en ignorer unO
.L
se comporte- t-il même de cette façon?J,
2019 octetsEssayez-le en ligne!
Émet également le numéro d'origine.
Explication
la source
[:+/
->1#.
miaou!APL (Dyalog) ,
232017 octets3 octets enregistrés grâce à @ngn
Essayez-le en ligne!
Comment?
⍵∪⍨
- ajouter le tableau actuel au+/
- somme de∊
- aplati⍳¨
- plages de chacun⍎¨⍕
- chiffre du⊃⍵
- valeur précédente⍣≡
jusqu'à la convergence. L'utilisation de∪
(union) garantit qu'une fois le premier 1 joint, le suivant sera exclu en raison de l'unicité définie et le tableau convergera.la source
1↓
(déposer en premier){+/∊⍳¨⍎¨⍕⎕←⍵}⍣≡
sans obtenir le dernier 1 imprimé?Haskell,
514746 octetsEssayez-le en ligne!
Modifier: @ H.PWiz a enregistré un octet. Merci!
la source
Python 2 , 62 octets
Essayez-le en ligne!
la source
Wolfram Language (Mathematica) ,
4341 octetsEssayez-le en ligne!
Comment ça fonctionne
L'expression
#.(#+1)/2&@IntegerDigits@#
donne la contrepartie numérique de#
. Nous saisissonsEcho
l'entrée, utilisons une évaluation de court-circuit avec&&
pour arrêter si nous avons atteint1
, et sinon récursions sur l'homologue numérique.-2 octets merci à Martin Ender pour l'
.
astuce: nous n'avons pas à utiliserTr
pour additionner les chiffres si nous remplaçons la multiplication#(#+1)/2
par le produit scalaire#.(#+1)/2
.la source
Tr
:Echo@#>1&�[#.(#+1)/2&@IntegerDigits@#]&
FixedPointList
sauf comment cela imprime le point fixe deux fois). Il semble que cela aurait dû arriver auparavant.Wolfram Language (Mathematica) ,
494239 octetsMerci à Misha Lavrov pour avoir économisé 3 octets.
Essayez-le en ligne! (TIO a besoin de parenthèses autour du
++y
pour une raison quelconque. Dans mon installation Mathematica locale, il fonctionne sans eux, comme il se doit.)Imprime chaque valeur sur sa propre ligne, précédée de
>>
et inclut le numéro de départ.la source
#//.x_:>(y=IntegerDigits@Echo@x).++y/2&
. (... peut-être. Pour une raison quelconque, TIO n'aime pas ça, mais Mathematica va bien avec ça?)#//.x_:>(y=IntegerDigits@Echo@x).(++y)/2&
est de 41 octets et fonctionne dans TIO. Mais ma copie de Mathematica ne pense pas que les parenthèses soient nécessaires.Ohm v2 ,
97 octetsEssayez-le en ligne!
Explication
la source
u
inutile?}
ne divisera pas les chiffresRétine , 21 octets
Essayez-le en ligne! (Les sorties des cas individuels ne sont pas bien séparées, mais chaque sortie se termine par un
1
.)Imprime chaque numéro sur sa propre ligne, dans l'ordre, y compris le numéro de départ.
Explication
Ceci est juste une configuration du programme.
{
fait en sorte que le programme boucle jusqu'à ce qu'il ne change pas le résultat (ce qui arrive une fois que nous y sommes1
),:
imprime le numéro avant chaque itération et;
empêche le résultat final d'être imprimé deux fois à la fin du programme. C'estG
juste ma façon habituelle de créer une scène sans op.Convertissez chaque chiffre en unaire et placez-le sur sa propre ligne.
Calculez le nombre triangulaire sur chaque ligne, en remplaçant chacune
1
par son préfixe. Nous pourrions également utiliserM!&`1+
ici, ce qui nous donne tous les suffixes de chaque ligne.Comptez tous les
1
s, qui résume tous les nombres triangulaires et reconvertit le résultat en décimal.la source
Rubis,
60 4742 octets-13 octets par @JustinMariner
-5 octets par @GB
Essayez-le en ligne!
la source
[*...]
) et passer(k+1)
à-~k
pour enregistrer un total de 5 octets: Essayez-le en ligne! De plus, vous pouvez économiser 8 de plus en passant à une fonction lambda anonyme: essayez-la en ligne!.map
ne pas pouvoir prendre de tableaux.Befunge-93 , 51 octets
Essayez-le en ligne!
James Holderness a intelligemment remodelé mon programme en une forme de 51 octets. Merci!
la source
Pushy ,
24222117 octetsEssayez-le en ligne!
Explication
la source
Japt ,
1917 octetsPrend l'entrée comme un tableau à élément unique.
Essayez-le
la source
R , 70 octets
Essayez-le en ligne!
Renvoie également la valeur d'origine.
R , 80 octets
Essayez-le en ligne!
Ne renvoie pas la valeur d'origine.
la source
Lua , 91 octets
Essayez-le en ligne!
la source
05AB1E ,
2012 octetsÉconomisé 2 octets grâce à caird coinheringaahing
Essayez-le en ligne!
Explication
(ancienne version)
la source
JavaScript,
6157 octetsEssayez-le en ligne!
la source
Python 2 , 69 octets
Essayez-le en ligne!
la source
Fusain , 18 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
la source
dc , 62 octets
Essayez-le en ligne!
la source
k , 19 octets
Sans surprise, fonctionne de manière similaire aux solutions APL et J déjà publiées
la source
Gelée , 7 octets
Essayez-le en ligne!
DRFSµÐĿ
: Programme complet / lien monadique.ÐĿ
: Boucle jusqu'à ce que les résultats ne soient plus uniques (si quelque chose d'autre que 1 se produisait deux fois, alors l'entrée donnée n'a pas de résultat défini, car elle n'atteindrait jamais 1).D
: Convertit d'un entier en décimal.R
: Plage (indexé 1). Vectorise.F
: Aplatir etS
: Somme (µ
crée simplement une nouvelle chaîne monadique)la source
dc, 31 octets
La fonction
m
calcule la fonction digitangulaire de son entrée;f
répète jusqu'à ce que le résultat atteigne 1.Notez que nous utilisons le radix d'entrée pour extraire les chiffres - cela signifie qu'il fonctionnera dans n'importe quel système de base, pas seulement décimal.
Démo
la source
Python 2 , 76 octets
Essayez-le en ligne!
la source
Neim , 8 octets
Explication:
Essayez-le en ligne!
Sortie formatée
la source
D , 140 octets
Essayez-le en ligne!
la source
PHP, 71 + 1 octets
Exécuter en tant que pipe avec
-nR
ou l' essayer en ligne . (nécessite PHP 5.3 ou version ultérieure pour l'opérateur Elvis)la source
A?:B
: si A est véridique alors A autre BAjouter ++ , 32 octets
Essayez-le en ligne!
Ne produit pas la première valeur
Comment ça fonctionne
la source
Perl 6 , 36 octets
Essayez-le en ligne!
Inclut le numéro d'entrée dans la liste de sortie.
la source