Le mathématicien fou possède une vaste collection de nombres, et donc l'espace qu'il a laissé est assez limité. Pour en sauver, il doit plier ses entiers, mais malheureusement il est vraiment paresseux. Votre tâche, si vous souhaitez l'aider, est de créer une fonction / programme qui plie un entier positif donné pour notre maniaque des nombres.
Comment plier un entier?
S'il est divisible par la somme de ses chiffres, divisez-le par la somme de ses chiffres. S'il ne répond pas à cette exigence, prenez son reste lorsqu'il est divisé par la somme de ses chiffres. Répétez le processus jusqu'à ce que le résultat atteigne 1
. L'entier replié est le nombre d'opérations que vous avez dû effectuer. Prenons un exemple (disons 1782
):
Obtenez la somme de ses chiffres:
1 + 7 + 8 + 2 = 18
.1782
est divisible par18
, donc le nombre suivant est1782 / 18 = 99
.99
n'est pas divisibles par9 + 9 = 18
, d' où nous prenons le reste:99 % 18 = 9
.9
est évidemment divisible par9
, donc nous le divisons et obtenons1
.
Le résultat est 3
, car 3 opérations ont été nécessaires pour atteindre 1
.
Règles et spécifications
Certains nombres entiers peuvent avoir la somme de chiffres égaux à
1
, tels que10
ou100
. Votre programme n'a pas besoin de gérer de tels cas. Cela signifie que vous serez assuré que l'entier donné en entrée n'a pas la somme des chiffres égale à1
, et qu'aucune opération avec l'entier donné ne donnera un nombre dont la somme des chiffres est1
(sauf pour1
lui-même, qui est le " cible"). Par exemple, vous ne recevrez jamais10
ou20
en entrée.L'entrée sera un entier positif supérieur à
1
.Les échappatoires par défaut s'appliquent.
Vous pouvez prendre des entrées et fournir des sorties par n'importe quel moyen standard .
Cas de test
Entrée -> Sortie 2 -> 1 5 -> 1 9 -> 1 18 -> 2 72 -> 2 152790 -> 2 152 -> 3 666 -> 3 777 -> 3 2010 -> 3 898786854 -> 4
Voici un programme qui vous permet de visualiser le processus et d'essayer plus de cas de test.
C'est le code-golf , donc le code le plus court dans chaque langue (marqué en octets) gagne!
8987868546
c'est une entrée valide, cela cassera votre outil de test, et aussi beaucoup (sinon toutes) des réponses ...898786854
, non8987868546
(vous avez ajouté un6
à la fin)8987868546
n'est pas 1 ( règle 1 respectée ) et8987868546
est un entier positif supérieur à 1 ( règle 2 respectée ).Réponses:
05AB1E ,
1312 octetsEssayez-le en ligne!
Explication
la source
Python 2 ,
6357 octets-1 grâce à totalementhumain
-1 grâce à M. Xcoder
-4 grâce à reffu
Essayez-le en ligne!
la source
Haskell,
8578 octetsEnregistré 7 octets grâce à Bruce Forte.
Essayez-le en ligne.
la source
divMod
et en supprimantwhere
: Essayez-le en ligne!where
. Je vais l'utiliser à l'avenir. :)sum[read[d]|d<-show n]
enregistre un octetJavaScript (ES6),
66585149 octetsPrend l'entrée comme un entier. Renvoie
false
pour0
ou1
et renvoie une erreur de débordement lorsqu'il rencontre un nombre dont les chiffres s'additionnent1
.Essaye-le
la source
eval(array.join`+`)
?Husk , 12 octets
Essayez-le en ligne!
Explication
la source
C # (.NET Core) , 87 octets
Essayez-le en ligne!
Fonction lambda qui prend et retourne un entier.
la source
Japt ,
221917 octets-3 octets grâce à @Shaggy.
-2 octets grâce à @ETHproductions
Essayez-le en ligne!
la source
s_¬
pourì
enregistrer encore deux octets :-)Rétine , 100 octets
Essayez-le en ligne! Link ne comprend que des cas de test plus petits car les plus grands prennent trop de temps.
la source
Mathematica, 73 octets
la source
==0
être remplacé par<1
?PHP, 68 + 1 octets
sortie unaire:
sortie décimale, 73 + 1 octets:
Exécuter en tant que pipe avec
-nR
ou l' essayer en ligne .L'opérateur Elvis nécessite PHP 5.3 ou une version ultérieure. Pour les anciens PHP, remplacez
?:
par?$n%$s:
(+5 octets).la source
Rubis, 46 octets
la source
Haskell ,
94938988 octetsCela semble vraiment long ..
Essayez-le en ligne!
Merci @Laikoni & @nimi pour avoir joué 1 octet chacun!
la source
C (gcc) ,
83817673 octetsEssayez-le en ligne!
la source
Gelée , 12 octets
Essayez-le en ligne!
la source
Pyth,
2014 octetsEssayez-le ici.
la source
Perl,
71octets,64octets, 63 octetsEssayez-le en ligne
EDIT: enregistré 7 octets, grâce au commentaire de Xcali
EDIT: depuis 5.14 substitution non destructive s /// r
la source
-pl
le dessus est censé être un drapeau de ligne de commande à la place?-pl
drapeau selon ce post .$c
n'a pas besoin d'être initialisé. Il commencera àundef
ce qui est 0. Le point-virgule après la fermeture while peut aller. De plus, vous n'en avez pas besoin-l
. Il n'est pas nécessaire de prendre plusieurs entrées en une seule fois.Dyalog APL, 36 octets
Essayez-le en ligne!
Comment?
la source
Gaia , 13 octets
Essayez-le en ligne!
Explication
la source
Matlab, 150 octets
Les entrées doivent être données à la fonction sous la forme d'une chaîne, telle que X ('152').
La fonction fonctionne en bouclant et en incrémentant d. le
x=y;
ligne était nécessaire pour éviter une erreur de Matlab essayant de lire et d'écraser une valeur de variable en même temps, apparemment, ce qui était nouveau pour moi.Non golfé:
la source
Haskell , 68 octets
Essayez-le en ligne! Basé sur la réponse de w0lf .
la source
R , 85 octets
Fonction anonyme qui renvoie la sortie requise.
Vérifiez tous les cas de test!
la source