Le code le plus court pour passer toutes les possibilités l'emporte.
En mathématiques, la persistance d'un nombre mesure combien de fois une certaine opération doit être appliquée à ses chiffres jusqu'à ce qu'une certaine condition fixe soit atteinte. Vous pouvez déterminer la persistance additive d'un entier positif en ajoutant les chiffres de l'entier et en répétant. Vous continueriez d'ajouter les chiffres de la somme jusqu'à ce qu'un numéro à un seul chiffre soit trouvé. Le nombre de répétitions qu'il a fallu pour atteindre ce nombre à un chiffre est la persistance additive de ce nombre.
Exemple utilisant 84523:
84523
8 + 4 + 5 + 2 + 3 = 22
2 + 2 = 4
It took two repetitions to find the single digit number.
So the additive persistence of 84523 is 2.
Vous recevrez une séquence d'entiers positifs dont vous devez calculer la persistance additive. Chaque ligne contiendra un entier différent à traiter. L'entrée peut se faire dans n'importe quelle méthode d'E / S standard .
Pour chaque entier, vous devez sortir l'entier, suivi d'un espace unique, suivi de sa persistance additive. Chaque entier traité doit être sur sa propre ligne.
Cas de test
Entrée sortie
99999999999 3
10 1
8 0
19999999999999999999999 4
6234 2
74621 2
39 2
2677889 3
0 0
la source
Réponses:
K - 29 caractères
L'entrée est un nom de fichier passé en argument, 29 caractères n'incluant pas le nom de fichier.
la source
-1+#
=>#1_
Python 84 caractères
la source
06234
.. résultat défi réussi :-)Haskell, 100 caractères
la source
read.pure
au lieu de(-48+).fromEnum
, essayez-le en ligne!Python (93 octets)
la source
9
etand
input()
au lieu deint(raw_input())
....06234
.Husk ,
1015 octets+5 octets pour une horrible exigence d'E / S
Essayez-le en ligne!
Explication
Pour prendre en charge plusieurs entrées, nous devons utiliser
m(₁r)¶
(où₁
est la fonction effectuant le calcul intéressant):La fonction
₁
effectue les opérations suivantes:la source
bash, 105 caractères
Presque aucun golf n'est réellement impliqué, mais je ne vois pas comment l'améliorer.
la source
Haskell - 114
la source
pure
over(:[])
et en définissant un opérateur au lieu des
, essayez-le en ligne!Rubis, 85 caractères
J'ai dû emprunter l'idée de "somme-taille * 48" à Alex, parce que c'est juste trop beau pour être raté (en Ruby au moins).
la source
Golfscript, 40 caractères
la source
J - 45 caractères
Lit à partir de stdin
la source
^:a:
m'utiliser mais je n'ai pas trouvé de documentation appropriée ... des indices?a:
grâce à l'^:a:
astuce dans la carte de référence J [PDF]^:a:
que je connaissais: D^:(<'')
au début (probablement pour Kaprekar), jusqu'à ce que je la repère dans la carte et que j'en apprennea:
l'occasion.c - 519
(ou 137 si vous me remerciez pour le cadre ...)
Plutôt que de résoudre cette seule opération, j'ai décidé de produire un cadre pour résoudre tous les problèmes de persistance .
Seules les deux lignes à partir de
char*b
sont uniques à ce problème.Il traite l'entrée comme des chaînes, ce qui signifie que les "0" en tête ne sont pas supprimés avant l'étage de sortie.
Les commentaires ci-dessus, la vérification des erreurs et la génération de rapports, et la lecture de fichiers (l'entrée doit provenir de l'entrée standard) ont été supprimés:
Un peu plus pourrait être économisé si nous voulions fuir la mémoire comme un tamis. De même,
#define
en retour et autres, mais à ce stade, je ne tiens pas à le rendre plus laid.la source
J, 74 caractères
Modifications
[:
en ats@
0".
pour".
simplifier les chosesPar exemple
la source
Je pense que c'est à peu près le meilleur que je puisse trouver.
Ruby 101 Chars
la source
Caractères PARI / GP 101
Malheureusement, il n'y a pas de fonction d'entrée pour GP, donc je suppose que cela manque la partie IO. :(Correction: Merci Eelvex! :)la source
input()
:)Javascript - 95
EDIT: Whoops ne fait pas les multi-lignes
la source
J, 78
Solution récursive. Lit à partir de stdin. Écrit sur stdout , alors coupez-moi un peu - cela prend 18 caractères supplémentaires.
la source
Perl - 77 caractères
la source
JavaScript ,
5747 octets-10 octets grâce à @ l4m2!
Essayez-le en ligne!
la source
f=(s,c=0)=>s>9?f([...s+""].reduce((x,y)=>x*1+y*1),++c):c
f=(s,c=0)=>s>9?f([...s+""].reduce((x,y)=>x- -y),++c):c
f=(s,c=0)=>s>9?f(eval([...s+""].join`+`)),++c):c
s>9
eteval
étaient de grandes idées. Je pense que vous aviez un paren supplémentaire, ce qui en fait un total de 10 octets que vous m'avez sauvé :-)05AB1E , 13 octets
Entrée sous forme de liste d'entiers.
Essayez-le en ligne.
Explication:
la source
MathGolf , 11 octets
Essayez-le en ligne!
Incroyablement inefficace, mais cela nous importe peu. Fondamentalement, en utilisant le fait que la persistance additive d'un nombre est inférieure ou égale au nombre lui-même.Utilise le fait que la persistance additive est inférieure ou égale au nombre de chiffres du nombre. Réussit tous les cas de test avec facilité maintenant.
Le format d'entrée, bien que sous-optimal pour certaines langues, est en fait la méthode standard pour prendre plusieurs cas de test en entrée dans MathGolf. Chaque ligne de l'entrée est traitée comme sa propre exécution de programme et la sortie est séparée par une seule nouvelle ligne pour chaque exécution.
Explication (utilisation
n = 6234
)la source
K (ngn / k) , 16 octets
Solution:
Essayez-le en ligne!
Explication:
la source
Stax ,
811 octetsExécuter et déboguer
+3 octets grâce à @Khuldraeseth (la première réponse n'avait pas de sortie conforme)
la source
i
à la place deu
. Adhérant aux spécifications draconiennes d'E / S, cela devient 11 octets .scala 173:
la source
Perl 5 , 65 octets
Essayez-le en ligne!
la source
Java (OpenJDK 8) , 79 octets
Essayez-le en ligne!
Il y a un potentiel probable pour jouer au golf plus loin, mais j'examinerai cela à l'avenir, mais pour l'instant, je suis assez content de ce petit résultat.
la source
Python 3 , 82 octets
la source
Tcl , 95 octets
Essayez-le en ligne!
la source
Japt , 28 octets
Essayez-le en ligne!
la source
PHP, 72 + 1 octets
+1 pour le
-R
drapeau.Exécuter en tant que tuyau avec
-R
.$i
doit donc être initialisé.(De plus, il n'imprimerait rien au lieu de
0
chiffres uniques sans l'initialisation.)la source
Bash + coreutils, 83 octets
Essayez-le en ligne!
Doit être enregistré dans un script appelé
a
et placé dans le systèmePATH
, car il s'appelle récursivement. Prend l'entrée de la ligne de commande, commea 1999
. Renvoie par code de sortie.TIO a certaines limites sur ce que vous pouvez faire avec un script, il y a donc du code passe-partout pour faire fonctionner cela dans l'en-tête.
Imprime une erreur pour
stderr
une entrée supérieure à ce que les entiers bash peuvent gérer, mais puisque le calcul réel est effectué avec des chaînes, il donne quand même le bon résultat.la source