Tâche:
Étant donné un nombre entier dans le système de nombres décimaux, réduisez-le en un seul chiffre décimal, comme suit:
- Convertissez le nombre en liste de chiffres décimaux.
- Trouver le plus grand chiffre, D
- Supprimer D de la liste. S'il y a plus d'une occurrence de D, choisissez la première de gauche (position la plus significative), toutes les autres doivent rester intactes.
- Convertissez la liste obtenue en un nombre décimal et multipliez-la par D.
- Si le nombre est supérieur à 9 (comporte plus d'un chiffre décimal), répétez toute la procédure en y introduisant le résultat. Arrêtez-vous lorsque vous obtenez un résultat à un chiffre.
- Afficher le résultat.
Exemple:
26364 ->
1. 2 6 3 6 4
2. The largest digit is 6, so D=6
3. There are two occurrences or 6: at positions 1 and 3 (0-based). We remove the left one,
at position 1 and get the list 2 3 6 4
4. we convert the list 2 3 6 4 to 2364 and multiply it by D:
2364 * 6 = 14184
5. 14184 is greater than 9 so we repeat the procedure, feeding 14184 into it.
Nous continuons en répétant la procédure pour 14184 et ainsi de suite et nous passons aux résultats intermédiaires suivants, pour atteindre finalement 8:
11312
3336
1998
1782
1376
952
468
368
288
224
88
64
24
8
Le résultat pour 26364 est donc 8.
Entrée: Un entier / une chaîne représentant un entier
Sortie: Un seul chiffre, résultat de la réduction appliquée au nombre.
Cas de test:
9 -> 9
27 -> 4
757 -> 5
1234 -> 8
26364 -> 8
432969 -> 0
1234584 -> 8
91273716 -> 6
C'est du code-golf , donc les réponses les plus courtes en octets dans chaque langue sont gagnantes.
code-golf
arithmetic
integer
Galen Ivanov
la source
la source
10 -> 10
?Réponses:
05AB1E , 6 octets
Code:
Utilise le codage 05AB1E . Essayez-le en ligne!
Explication
la source
JavaScript (ES6), 49 octets
Prend l'entrée comme une chaîne représentant un entier, comme
f("26364")
.Cas de test
Afficher l'extrait de code
la source
Gelée , 13 octets
Essayez-le en ligne!
-1 grâce à un tour que j'ai trouvé chez Jonathan Allan réponse de .
Programme complet.
la source
Pyth , 16 octets
Prend l'entrée en tant que chaîne. Essayez-le ici! (Variante:
.WtH`*s.-ZeSZseS
)Pyth , 18 octets
Prend l'entrée sous forme d'entier. Essayez-le ici!
Comment ça marche
16 octets
18 byter
Être aussi proche de Jelly à ce type de défi est très bon pour Pyth IMO :-)
la source
Husk ,
141312 octetsMerci Zgarb d'avoir économisé 1 octet.
Essayez-le en ligne!
Explication:
la source
R ,
9995 octetsEssayez-le en ligne!
Une fonction récursive. L'ajout
f(number)
dans le pied de page peut être utilisé pour tester d'autres valeurs denumber
. La mise en œuvre directed
est la liste des chiffres et10^(n:2-2)%*%d[-M]
calcule le nombre avec le plus grand chiffre supprimé.la source
Python 2 , 72 octets
Essayez-le en ligne!
la source
432969
. "ValueError: Littéral invalide pour int () avec base 10: ''"n
0 était alorsn*(n<=9)
considéré comme une valeur de fausseté, 0, ce qui rendait la récursion continue et provoquait une erreur, alors que la chaîne'0'
était une valeur de vérité et que la récursivité était donc stoppée.Ruby , 59 octets
Essayez-le en ligne!
Fonction lambda récursive appelée comme
f[26364]
.la source
Gelée , 15 octets
Essayez-le en ligne! ou voir la suite de tests .
Comment?
la source
Haskell ,
706766 octetsSauvegardé
34 octets grâce à nimi!Essayez-le en ligne!
la source
until
. Essayez-le en ligne! ....span=<<(>).maximum...
.C # (.NET Core) , 126 octets
Essayez-le en ligne!
la source
if(n<10)return n;...return F(...);
à une seule déclaration avec ternaire, si, comme ceci:int F(int n){var x=(n+"").ToList();var m=x.Max(d=>d);x.RemoveAt(x.IndexOf(m));return n<10?n:F(int.Parse(string.Concat(x))*(m-48));}
( 131 octets )using System.Linq;
(18 octets) dans le décompte.APL (Dyalog) ,
363533 octets-1 en raison de la mise à jour des spécifications OP. -2 grâce à ngn.
Fonction de préfixe tacite anonyme. Prend un entier comme argument.
Essayez-le en ligne!
{
…}
Une fonction où⍵
est l'argument:⍵>9:
si l'argument est supérieur à 9, alors:⍕⍵
formate (stringify) l'argument⍎¨
exécuter (évaluer) chacun (cela nous donne les chiffres sous forme de nombres)(
…)
Applique la fonction tacite suivante sur ceux⌈/
le plus grand chiffre×
fois10⊥
le décodage en base 10 de (recueille les chiffres)⊂
tous les chiffres⌷⍨¨
indexé par chacun des⍳∘≢
les i ndices du nombre de chiffres≠
diffère de⊢⍳⌈/
le plus grand chiffre i ndex dans la liste complète des chiffres∇
recurse (c'est-à-dire appeler soi-même) sur cette⋄
autre⍵
renvoyer l'argument non modifiéla source
>10
être>9
?>9
économiserais un octet.Perl 6 ,
4541 octetsEssaye-le
Essaye-le
Étendu:
la source
Retina , 67 octets
Essayez-le en ligne! Link inclut les cas de test assez rapidement pour ne pas écraser le serveur de Dennis. Explication:
Pour les nombres à deux chiffres, cela duplique le nombre avec un
;
séparateur, en préfixant 1 au duplicata. Pour les numéros à un chiffre, ce préfixe correspond1;
au numéro.Triez les chiffres du duplicata. (Pour les chiffres à un chiffre, cela n'a aucun effet.)
Recherchez la première occurrence du chiffre le plus grand et supprimez-la, ainsi que les autres chiffres de la copie et le numéro supplémentaire 1 ajouté précédemment. (Pour les nombres à un chiffre, la correspondance échoue, cela ne fait rien.)
Multipliez le nombre par le chiffre. Pour les nombres à un chiffre, cela donne le numéro d'origine et la boucle se termine. Sinon, le programme est mis en boucle jusqu'à ce qu'un chiffre soit atteint.
la source
C # (.NET Core) ,
177164 + 18 octetsSauvegardé 13 octets grâce à @raznagul!
Essayez-le en ligne!
la source
s.Length<2
pourn<10
. En outre, vous pouvez supprimer l'opérateur ternaire et justereturn f(y)
à la fin, car le cas est traité par l'if
étape suivante de la récursivité.Java 8,
126104 octets-22 octets grâce à @ OlivierGrégoire .
Explication:
Essayez ici.
la source
n>9
et conditions de retour au lieu den<10
).Jq 1.5 , 86 octets
Étendu
Essayez-le en ligne!
la source
Perl 5 , 41 + 1 (
-p
) = 42 octetsEssayez-le en ligne!
la source
9
. :( mais bricolé un peu et a réussi à obtenir 41 octets avec un correctif: essayez-le en ligne!Lua,
137108 bytesThanks to Jonathan S for golfing off 29 bytes.
Try it online!
la source
D,
188186185 bytesTry it online!
I hate lazy evaluation, so much. Any tips are welcome!
la source
Lua, 154 Bytes
I should have some ways to golf this down, I'm experimenting right now.
Try it online!
Explanations
la source
PowerShell, 123 bytes
Try it online!
Ooof. PowerShell arrays are immutable, so we need to use the lengthy
[Collections.ArrayList]
casting here so we can call.remove()
later.Takes input
$args
, converts it to a string, then achar
-array, then anArrayList
. Stores that into$a
. Then wewhile
loop until we're at or below9
. Each iteration, we're calling.remove
on the largest element of$a
(done bysort
and taking the last element[-1]
), storing the largest element into$b
at the same time. This happens to work because the ASCII values sort in the same fashion as the literal digits.Next, we recompute
$a
, again as anchar
-array (andArrayList
implicitly), by casting our$b
(which is currently achar
) to a string, then an int with+
, and multiplying that to$a
-join
ed into a string (implicitly cast to int). This satisfies the "multiply by D" portion of the challenge.Finally, once we're out of the loop, we put
$a
onto the pipeline and output is implicit.la source
Pip,
2221 bytesTakes input as a command-line argument. Verify all test cases: Try it online!
Explanation
Ungolfed, with comments:
In the golfed version, the loop body is condensed into a single expression:
la source
C
103,95, 90 bytesTry it online!
la source
Java 8: 115 bytes
-10 bytes thanks to Jo King
Unfortunately you can't call a lambda function recursively, so an extra 11 bytes is needed for the method header. I am aware there is a shorter Java answer that loops instead, but I decided to come up with this on my own.
Try it online
la source
-48
from the map to the end of them
definition. Try it online! You also have some extra whitespace in your TIO linkJ, 40 bytes
Try it online!
explanation
la source
PowerShell, 230 bytes
Try it online!
Wasted too much on all the type casting.
la source
PHP,
8277+1 bytesRun as pipe with
-nR
or try it online.la source
dc,
9885 bytesMany thanks to this answer for the idea of utilizing
~
in the extraction of digits from a number, resulting in two saved bytes over the original version of the code.This was a rather though one to complete in
dc
with its nonexistent string manipulation capabilities.Try it online!
la source
Bash, 80 bytes
Uses packages Core Utilities (for
sort
andtail
) andgrep
.How does it work?
la source