Contribution:
Un entier positif n composé de chiffres compris entre 0 et 9 .
Défi:
Si d est le chiffre le plus élevé du nombre entier, supposons que la base du nombre est d + 1 . Par exemple, si le nombre entier est 1256, vous supposerez qu'il se trouve en base 7 , s'il s'agit de 10110, vous supposerez qu'il est en base 2 (binaire) et s'il est 159 il est décimal.
À présent, procédez comme suit: 1: atteignez un nombre entier en base 10 ou 2: atteignez un nombre entier.
- Convertir le nombre entier de base- (d + 1) en base 10
- Trouver la base de ce nouvel entier (encore une fois, base- (d + 1) où d est le chiffre le plus élevé du nouveau nombre)
- Passez à l'étape 1 .
Exemples:
Supposons que l'entrée est n = 413574 . Le chiffre le plus élevé d = 7 , il s'agit donc de la base 8 (octale). Convertissez-le en décimal et obtenez 137084 . Le chiffre le plus élevé d = 8 , il s'agit donc de la base 9 . Convertissez-le en décimal et obtenez 83911 . Le chiffre le plus élevé est 9 , il s'agit donc d'un nombre décimal et nous nous arrêtons. La sortie doit être 83911 .
Supposons que l'entrée est n = 13552 . Le chiffre le plus élevé est d = 5 , il s'agit donc de la base 6 . Convertissez-le en décimal et obtenez 2156 . Le chiffre le plus élevé d = 6 , il s'agit donc de la base 7 . Convertissez cela en décimal et obtenez 776 . Le chiffre le plus élevé est d = 7 , il s'agit donc de la base 8 . Convertissez-le en décimal et obtenez 510 . Le chiffre le plus élevé est d = 5 , il s'agit donc de la base 6 . Convertissez-le en décimal et obtenez 186 . Le chiffre le plus élevé est 8 , il s'agit donc de la base 9 . Convertissez ceci en décimal et obtenez 159 . Le chiffre le plus élevé est 9 , il s'agit donc d'un nombre décimal et nous nous arrêtons. La sortie doit être 159 .
Supposons que l'entrée est n = 17 . Cela nous donnera 15 , puis 11 , puis 3 , que nous afficherons puisqu'il s'agit d'un seul chiffre.
Cas de test:
5
5
17
3
999
999
87654321 (base-9 -> 42374116 in decimal -> base-7 -> 90419978 in decimal)
9041998
41253 (5505 -> 1265 -> 488 -> 404 -> 104 -> 29)
29
Remarques:
- Règles standard concernant les E / S, les échappatoires, etc. Vous pouvez prendre l'entrée comme une chaîne
- Les explications sont encouragées
- Vous pouvez utiliser les commandes de conversion de base intégrées
- Les solutions qui n'utilisent pas les fonctions de conversion de base intégrées du langage (si elles existent) sont les bienvenues, même si elles s'avèrent beaucoup plus longues que l'approche évidente utilisant des fonctions intégrées.
Apparemment, il s’agit du document OEIS A091047 .
la source
Réponses:
Mathematica, 56 octets
Essayez-le en ligne! (Utilisation des mathématiques.)
Je pensais vérifier à quoi ressemble la séquence:
Et voici un graphique du nombre d’étapes nécessaires pour trouver le résultat:
(Cliquez pour les versions plus grandes. Consultez l'historique des révisions pour les tracés jusqu'à n = 1 000. )
Cela ressemble à un mélange très intéressant de structure à grande échelle et de chaos à échelle fine. Je me demande ce qui se passe avec les écarts plus larges autour de 30 000 et 60 000.
la source
9
, alors ils sont déjà en base 10. Mais pour 30k et 60k il semble que les nombres avec un 8 ou même 7 (devraient vérifier) au lieu de cela 9 deviennent toujours la base 10 après au plus un pas.Java 8,
172166163152151 15114013811611499 octetsPrend l'entrée en tant que
String
.-64 octets grâce à @ OlivierGrégoire . Et ici, je pensais que mon 172 initial n'était pas trop mauvais ..;)
Essayez ici.
Explication:
la source
s->{for(Integer b=0;b<10&s.length()>1;)s=""+b.valueOf(s,b=s.chars().max().getAsInt()-47);return s;}
. De plus, j'ai supprimé la plupart de mes commentaires car ils sont totalement hors de propos maintenant (b
c'est la base, votrea
; ets
le nombre sur lequel nous travaillons).Integer b;return(b=s.chars().max().getAsInt()-47)>9|s.length()<2?s:c(""+b.valueOf(s,b));
(88), mais je suis novice en matière de codage golf. Ceci est un extrait, non? Y at-il un moyen de déclarer cela comme une méthode sans avoir à ajouterpublic String c(String s)
?public
, mais je crains que vous n'ayez vraiment à utiliserString c(String s){}
pour les appels récursifs, même en Java 8. Lorsque vous créez un lambda à l'aide d'java.util.function.Function<String, String> c=s->{Integer b;return(b=s.chars().max().getAsInt()-47)>9|s.length()<2?s:c.apply(""+b.valueOf(s,b));}
une interface, vous obtenezinterface N{String c(String s);}N n = s->{Integer b;return(b=s.chars().max().getAsInt()-47)>9|s.length()<2?s:n.c(""+b.valueOf(s,b));};
une " auto-référence dans l'initialiseur erreur "dans les deux cas. Mais très belle approche quand même!Pyth, 9 octets
Suite de tests
Explication:
la source
Q
etQ
, je comprends.u
sans que sa troisième entrée soit appliquée jusqu'à la répétition, alors qu'avec une troisième entrée, elle s'applique un nombre de fois déterminé.u
Lambda aG
etH
, mais vous n'avez pas besoin de l'utiliserH
.G
parH
aurait eu le même résultat ... la variable implicite btw estG
?G
oui.H
compte à partir de 0 à chaque itération, donc c'est complètement différent. Je ne sais pas vraiment de quoi vous parlez. Voici un exemple de programme pour vous montrer ce qui se passe: pyth.herokuapp.com/…JavaScript (ES6),
63 57 5453 octetsÉconomisé 8 octets grâce à Shaggy et Dom Hastings
la source
+a>9||b<9
et inverser le ternaire.f=n=>n>9&&(k=Math.max(...n+"")+1)<10?f(parseInt(n,k)):n
Python 3 ,
91 78 76 7573 octets@ Emigna rasé 5 octets. @FelipeNardiBatista a sauvegardé 1 octet. @ RomanGräf enregistré 2 octets
Essayez-le en ligne!
Explication
la source
05AB1E ,
105 octets5 octets sauvés grâce à l' urne magique Octopus
Comme cela ralentit très rapidement pour les entrées volumineuses, je laisse ici la version beaucoup plus rapide ici pour les tests. L'algorithme est le même, seul le nombre d'itérations diffère.
Essayez-le en ligne!
Explication
la source
тFZ>ö§
? Vu que le nombre d'itérations ( comme on le voit ici ) semble plafonner? Si vous voulez être technique, le taux d'augmentation des itérations est probablement logarithmique ... Vous pouvez donc utiliser quelque chose du type:DFZ>ö§
et indiquez que cela ne fonctionnera pas trop chern
. OU peut-être même:T.n>FZ>ö§
calculer directement le nombre d'itérations sous la formelog_10(n)
.F§Z>ö
devrait faire l'affaire.§
.§
,Z
prendra le nombre le plus élevé de la pile au lieu du chiffre le plus élevé du nombre situé en haut de la pile.APL (Dyalog) ,
2016 octetsPrend et retourne une chaîne
(
…)⍣≡
Applique la fonction suivante jusqu'à ce que deux termes consécutifs soient identiques:⍎¨
exécuter chaque caractère (transforme la chaîne en une liste de nombres)(
…)
Appliquez la fonction tacite suivante à celle-ci:⌈/
trouver le maximum de l'argument1+
ajoute un⊢⊥⍨
évaluer l'argument dans cette base⍕
format (stringify, en préparation d'une autre application de la fonction externe)Essayez-le en ligne!
la source
Ruby ,
6056 octetsEssayez-le en ligne!
la source
Mathematica, 52 octets
Fonction pure prenant un entier non négatif en entrée et renvoyant un entier non négatif. Utilise la même mécanique de base
FromDigits[s=IntegerDigits@#,Max@s+1]
que la réponse de Jenny_mathy , mais exploiteFixedPoint
pour effectuer l'itération.la source
Perl 6 , 49 octets
Essaye-le
Étendu:
la source
PHP , 71 octets
Essayez-le en ligne!
la source
Pip , 17 octets
Prend l'entrée comme argument de ligne de commande. Essayez-le en ligne!
Explication
C'était amusant - j'ai eu à sortir les opérateurs de comparaison de chaînes.
Nous voulons boucler jusqu'à ce que le nombre soit un chiffre ou OU contient un 9. Équivalemment, nous voulons boucler alors que le nombre est composé de plusieurs chiffres ET ne contient pas un 9. Équivalent, boucler tant que le nombre est supérieur à 9 ET que le chiffre maximum est moins de 9:
a>9>MXa
.la source
Python 2 ,
60595653 octets4 octets sauvés grâce à Felipe Nardi Batista
3 octets sauvés grâce à ovs
Essayez-le en ligne!
En utilisant un lambda récursif, comparant le résultat de la conversion de base à l'itération précédente.
la source
x==y and x or ...
cex
qui ne sera jamais0
(base 1). ou même(x==y)*x or ...
x and x==y or ...
qui n'a pas fonctionné, mais je ne maîtrise pas très bien ces astuces et je ne savais donc pas que je pouvais l'inverser :)C #,
257244243244233222 octetsBien, C # prend toujours beaucoup d'octets mais c'est juste ridicule. Aucune des fonctions intégrées ne pouvant gérer une base arbitraire, j'ai donc dû calculer la conversion moi-même. Ungolfed:
la source
Mathematica, 92 octets
la source
Javascript (ES6) avec fonction de flèche 0, 74 octets
la source
f('11')
après la fonction? À moins que je manque quelque chose qui semble seulement être l'utilisation ne fait pas réellement partie de la soumission. Si tel est le cas, supprimez-le de la section de code et mettez-le dans votre explication (lorsque vous en ajoutez un) et mettez à jour votre nombre d'octets à 67.K4 , 19 octets
Solution:
Exemples:
Explication:
Utilisez
/:
intégré pour convertir la base.la source
Kotlin , 97 octets
Embellies
Tester
TIO
TryItOnline
la source
Japt , 25 octets
Essayez-le en ligne!
la source
Gelée , 9 octets
Essayez-le en ligne!
la source
C,
159157 octetsla source
Scala , 119 octets
Essayez-le en ligne!
Scala , 119 octets
Essayez-le en ligne!
Les deux méthodes fonctionnent de la même manière, mais dans la première, je mets
x.length-1
une variable et dans la seconde, je ne le fais pas.la source