Persistance multiplicative
- Multiplie tous les chiffres d'un nombre
- Répéter jusqu'à ce qu'il ne reste qu'un seul chiffre
Comme expliqué par Numberphile :
- Numberphile "Quelle est la particularité de 277777788888899?"
- Numberphile "Persistance multiplicative (extra métrage)"
Exemple
- 277777788888899 → 2x7x7x7x7x7x7x8x8x8x8x8x8x9x9 = 4996238671872
- 4996238671872 → 4x9x9x6x2x3x8x6x7x1x8x7x2 = 438939648
- 438939648 → 4x3x8x9x3x9x6x4x8 = 4478976
- 4478976 → 4x4x7x8x9x7x6 = 338688
- 338688 → 3x3x8x6x8x8 = 27648
- 27648 → 2x7x6x4x8 = 2688
- 2688 → 2x6x8x8 = 768
- 768 → 7x6x8 = 336
- 336 → 3x3x6 = 54
- 54 → 5x4 = 20
- 20 → 2x0 = 0
Au fait, il s’agit de l’enregistrement actuel: le plus petit nombre avec le plus grand nombre de pas.
Le golf
Un programme qui prend un nombre entier en entrée puis affiche le résultat de chaque étape, en commençant par l'entrée elle-même, jusqu'à atteindre un seul chiffre. Pour 277777788888899, la sortie doit être
277777788888899
4996238671872
438939648
4478976
338688
27648
2688
768
336
54
20
0
(Compter le nombre d'étapes est laissé à l'utilisateur comme un exercice).
Plus d'exemples
De A003001 :
25
10
0
De A003001 aussi:
68889
27648
2688
768
336
54
20
0
De la vidéo Numberphile :
327
42
8
Il y a donc eu une question à propos de la persistance additive , mais il s'agit de la persistance multiplicative. En outre, cette question demande le nombre d'étapes en sortie, alors que je suis intéressé à voir les résultats intermédiaires.
Réponses:
Gelée , 4 octets
Essayez-le en ligne!
Explication
En bonus, voici un TIO qui trouvera les numéros avec le plus grand nombre d'étapes pour une plage donnée de nombres de chiffres. Il évolue bien même sur TIO.
la source
TI-BASIC (TI-84),
303231 octets-1 octet grâce à @SolomonUcko!
L'entrée est en
Ans
.La sortie est affichée en tant que demandes de challenge. La fin
Ans
est nécessaire pour imprimer la dernière étape.Je dois admettre que je n’ai pas pensé à cette formule moi-même, mais que je l’ai trouvée ici et que je l’ai modifiée pour mieux relever le défi.
EDIT: En relisant le défi, je me suis rendu compte que le programme doit se terminer si le produit est à un chiffre. Par conséquent, 2 octets devaient être ajoutés pour expliquer cela.
Exemple:
Explication:
Modèle visuel:
Ans
commence comme125673
.Ce modèle ne couvre que la logique qui sous-tend la multiplication des chiffres; tout le reste est plus facile à comprendre.
Remarques:
TI-BASIC est un langage à jeton. Le nombre de caractères ne correspond pas au nombre d'octets.
10^(
est ce jeton d'un octet .Ce programme ne fournira pas la séquence correcte de produits avec des nombres entiers supérieurs à 14 chiffres en raison des limites de précision décimale sur les calculatrices TI.
la source
10^(
dehorsseq(
et en omettant la parenthèse fermante?K (ngn / k) , 9 octets
Essayez-le en ligne!
{
}\
continue à appliquer la fonction entre accolades jusqu'à ce que la séquence converge$x
formate l'argument sous forme de chaîne (liste de caractères).'
évaluer chacun (les autres dialectes de k nécessitent un colon,.:'
)*/
fois, à savoir le produitla source
dzaima / APL ,
14 à11 octetsEssayez-le en ligne!
la source
R , 59 octets
Essayez-le en ligne!
Puisque
print
invisibly
renvoie son entrée, nous pouvons utiliserprint(n)
à l'intérieur de lawhile
boucle pour simuler unedo-while
boucle. Ceci est inspiré par l' un de mes conseils pour jouer au golf dans R .L'en-tête aide à empêcher l'impression de grands nombres en notation scientifique.
la source
05AB1E ,
74 octetsEssayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
Wolfram Language (Mathematica) , 47 octets
Essayez-le en ligne!
la source
Wolfram Language (Mathematica) , 45 octets
Essayez-le en ligne!
la source
Echo
.Perl 6 , 23 octets
Essayez-le en ligne!
la source
Python 2 ,
4643 octets-3 grâce à xnor (comparaison chaînée)
Essayez-le en ligne!
la source
>
à la place deand
.PowerShell , 54 octets
Essayez-le en ligne!
Méthode itérative qui écrit d'abord l'argument d'entrée, puis le convertit en chaîne et le redirige vers un tableau de caractères. Ce tableau est rejoint par un seul astérisque et exécuté en tant que commande avec l'alias d'expression invoke. Etant donné que cela écrit le nombre de départ jusqu'au dernier nombre supérieur à 0 (20 dans le scénario de test donné), j'ajoute un final
$a
à la fin de la sortie.la source
C # (compilateur interactif Visual C #) ,
797468 octetsJ'essaie d'éviter la récursion en C # en raison de la longueur de la déclaration de la méthode, mais dans ce cas, cela économise par rapport à une boucle.
Essayez-le en ligne!
la source
PHP , 63 octets
Version itérative, appel avec
php -nF
entrée deSTDIN
.Essayez-le en ligne!
PHP ,
7271 octetsEssayez-le en ligne!
Version récursive, en fonction.
Entrée: 277777788888899
Entrée: 23
la source
Python 2 ,
616259 octetsEssayez-le en ligne!
-3 octets, merci à Jonathan Allan
la source
int.__mul__
est trois octets moins quelambda a,b:a*b
f(reduce(int.__mul__,map(int,`n`)))
pourf(eval('*'.join(`n`)))
enregistrer 13 octets.perl 5 (
-n
-M5.01
),323025 octets25 octets
30 octets
32 octets
la source
-lpF//
-lpF//
, mettre à jourMathGolf ,
9 à10 octetsEssayez-le en ligne!
Maintenant, il gère correctement les entrées à un chiffre. Pas parfait, mais au moins c'est correct.
Explication
la source
Julia 0.7 ,
3633 octetsEssayez-le en ligne!
Merci à H.PWiz pour -3 octets.
la source
[n;f(prod(digits(n)))]
JavaScript (ES6), 45 octets
Retourne un tableau d'entiers.
Essayez-le en ligne!
la source
PowerShell , 51 octets
Essayez-le en ligne!
la source
APL (NARS), 19 caractères, 38 octets
tester:
la source
Haskell, 45 octets
Essayez-le en ligne!
la source
J , 16 octets
Essayez-le en ligne!
la source
Ruby ,
383534 octetsEssayez-le en ligne!
1 octet enregistré par G B.
la source
Japt
-R
, 9 octetsHorriblement inefficace - n'essayez même pas d'exécuter le premier test!
L'essayer
la source
Brachylog , 7 octets
Essayez-le en ligne!
Explication
la source
JavaScript (Babel Node) , 46 octets
Essayez-le en ligne!
JavaScript (Babel Node) , 44 octets
Si l'entrée peut être prise comme chaîne
Essayez-le en ligne!
la source
PowerShell ,
6459 octetsEssayez-le en ligne!
Méthode itérative. Prend une entrée et la stocke dans
$a
, puis entre dans unefor
boucle tant que la longueur$a
est de deux ou plus (c'est-à-dire qu'elle est plus grande que9
). À l'intérieur de la boucle, nous produisons la sortie$a
, puis nous la recalculons en la convertissant avect
oCharArray
, en la combinantjoin
avec*
, puisiex
(en abrégéInvoke-Expression
et similaire àeval
). Une fois que nous sommes sortis de la boucle, il ne reste plus qu'un chiffre à imprimer, nous nous retrouvons$a
dans le pipeline.-5 octets grâce à KGlasier.
la source
9-lt$a
au lieu de$a.length-1
pour économiser 5 octets. Et si vous ne vous en teniez pas aux cordes tout le temps, vous pourriez couper un morceau décent. Regarde ma tentative PowerShell si tu veux!Charbon de bois , 13 octets
Essayez-le en ligne! Le lien est vers la version verbeuse du code. Explication:
Imprimer la saisie pour la première fois.
Répétez l'opération tant que la longueur de l'entrée n'est pas 1.
Remplacez l’entrée par la conversion numérique du produit en chaîne.
Imprimer l'entrée sur une nouvelle ligne.
la source
Retina , 24 octets
Essayez-le en ligne! Explication:
Imprimez la valeur actuelle sur sa propre ligne au début de chaque boucle jusqu'à ce qu'elle arrête de changer et n'imprime pas la valeur inchangée deux fois. Évaluez la valeur actuelle à la fin de chaque boucle.
Ajoutez un
*
après chaque chiffre.Terminez la transformation de l'entrée en une expression qui correspond au produit numérique.
Pour mémoire, Retina peut le faire en une seule ligne (25 octets):
la source
C (gcc) , 58 octets
Essayez-le en ligne!
L'approche itérative s'avère être plus courte d'un octet.
C (gcc) ,
6159 octets (récursif)Essayez-le en ligne!
La récursion semble être plus courte que l'itération pour l'impression et l'étape ...la source