Un nombre pandigital est un entier qui contient chaque chiffre de 0 à 9 au moins une fois. 1234567890, 1902837465000000 et 9023289761326634265 sont tous pandigital. Pour les besoins de ce défi, les nombres tels que 123456789 ne sont pas pandigital, car ils ne contiennent pas de 0, même si 123456789 = 0123456789.
Une paire diversifiée d'entiers est une paire d'entiers tels que est pandigital. est appelé l' exposant de diversification .
Défi: étant donné un entier , trouver le plus petit exposant de diversification correspondant . Il s'agit d'un code-golf , donc le programme le plus court en octets l'emporte.b
(Vous pouvez supposer qu'il existe un tel exposant, c'est-à-dire que votre programme ne recevra pas d'entrée invalide, telle qu'une puissance de 10.)
Votre solution doit être capable de gérer au minimum les cas de test donnés, mais elle doit théoriquement gérer toutes les entrées valides.
C'est A090493 sur OEIS.
Cas de test
2 -> 68
3 -> 39
4 -> 34
5 -> 19
6 -> 20
7 -> 18
8 -> 28
9 -> 24
11 -> 23
12 -> 22
13 -> 22
14 -> 21
15 -> 12
16 -> 17
17 -> 14
18 -> 21
19 -> 17
20 -> 51
21 -> 17
22 -> 18
23 -> 14
24 -> 19
25 -> 11
26 -> 18
27 -> 13
28 -> 11
29 -> 12
30 -> 39
31 -> 11
32 -> 14
33 -> 16
34 -> 14
35 -> 19
36 -> 10
1234567890 -> 1
1234567890 -> 1
.123456789
compte comme pandigital? Il est égal à0123456789
, ce qui est définitivement pandigital.Réponses:
Brachylog (v2), 9 octets
Essayez-le en ligne!
Ceci est une soumission de fonction. Le lien TIO contient un wrapper qui transforme une fonction en programme complet.
Explication
la source
Python 2 , 44 octets
L'entrée doit être longue, car elle
`k`
se comporte différemment pour les longs et les entiers.Essayez-le en ligne!
la source
Perl 6 , 32 octets
Essayez-le en ligne!
Assez explicite.
Explication
la source
JavaScript (Node.js) ,
51 4643 octetsPrend l'entrée comme un littéral BigInt. Renvoie vrai au lieu de 1 .
Essayez-le en ligne!
la source
Rubis , 41 octets
Essayez-le en ligne!
la source
Haskell, 50 octets
Essayez-le en ligne!
Même nombre d'octets:
la source
J , 25 octets
Essayez-le en ligne!
Verbe monadique unique. L'entrée doit être un entier à précision étendue (par exemple
2x
).Comment ça fonctionne
la source
(]+10>#@=@":@^)^:_*
Tcl , 82 octets
Essayez-le en ligne!
la source
llength
82 octetsRaquette ,
11096 octets-14 octets grâce à UltimateHawk!
Essayez-le en ligne!
la source
(define(f n[b 1])(if(= 10(length(remove-duplicates(string->list(~v(expt n b))))))b(f n(+ b 1))))
Python 3 ,
5247 octetsmerci à @BMO
Essayez-le en ligne!
la source
05AB1E (hérité) ,
109 octets1 octet enregistré grâce à M. Xcoder
Essayez-le en ligne!
Explication
la source
1µINmÙgTQ
- Essayez-le en ligne!N
alors. Merci!Fusain , 19 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Poussez à plusieurs reprises la chaîne vide dans la liste vide jusqu'à ce qu'il n'y ait pas de chiffres que la puissance de l'entrée sur la longueur de la liste ne contienne pas.
Imprimez la longueur de la liste.
la source
K (ngn / k) , 76 octets
Essayez-le en ligne!
{
}
fonction avec argumentx
|(99#10)\x
nous représentons les nombres sous forme de listes inversées de 99 chiffres décimaux - faites cela à l'argumenta::
assigner à une variable globalea
(k n'a pas de fermetures. nous devonsa
être globaux pour pouvoir l'utiliser dans des sous-fonctions){
}{
}\
tandis que la première fonction renvoie falsey, continuez à appliquer la deuxième fonction (aka boucle while), en préservant les résultats intermédiairesa*\:x
chacun desa
chiffres multiplié par chacun desx
chiffres ("produit extérieur")99 99#a*\:x,0
ajouter une colonne supplémentaire de 0 et remodeler à 99x99, cela déplace la i-ème ligne de i éléments vers la droite, en insérant 0 à gauche (cela fonctionne pour les tests, pour des entrées plus grandes, 99x99 peut entraîner des débordements)+/
somme{+/2 99#,/|0 10\x,0}/
propager le portage:{
}/
continuer à postuler jusqu'à la convergence0 10\x
divmod par 10 (une paire de listes)|0 10\x
moddiv par 102 99#,/|0 10\x,0
moddiv par 10, avec la partie "div" décalée d'un chiffre vers la droite+/
somme{10>#?(+/|\0<|x)#x}
- vérifier (pas) pandigital:|x
sens inversex
0<
dont les chiffres sont différents de zéro|\
maxima partiels+/
somme - cela compte le nombre de 0 en tête dansx
10>
sont-ils moins de 10?#
longueur de la séquence de pouvoirs - c'est le résultatla source
PowerShell , 107 octets
Essayez-le en ligne!
Assez simple, juste une honte que nous devons utiliser
[bigint]
partout. Nous prenons des informations$a
, puis configurons unefor
boucle avec un initialiseur$b=1
.Chaque itération on incrémente
$b
après avoir vérifié si$a ^ $b
(viapow
) envoyét
oCharArray
,sort
ed avec le-u
drapeau nique, puis-join
ed ensemble dans une chaîne est-n
ote
qual à la gamme0..9
également-join
ed dans une chaîne.C'est une bouchée. Par exemple, il comparerait
7 ^ 5 = 16807 --> "01678"
contre"0123456789"
, déterminer ils ne sont pas égaux, et continuer la boucle.Une fois que nous sommes sortis de la boucle, nous avons déterminé ce qui
$b
convient à notre entrée, et donc laisser cela sur le pipeline. La sortie est implicite.la source
Java, 108 octets
Essayez-le en ligne!
Explication
Force brute, boucle un ^ b jusqu'à ce qu'il trouve une chaîne avec 10 (ou plus, mais c'est impossible car il n'y aura que 0 à 9) caractères uniques.
BigDecimal
est nécessaire à la fois parce queMath.pow
n'est pas assez précis (échoue dans le cas11
), et aussi parce que la conversion d'unDouble
en une chaîne par défaut affiche une notation scientifique, ce qui rompt cette méthode de recherche d'un nombre pandigital.la source
new java.math.BigDecimal(a).pow(++b).toString()
à(new java.math.BigDecimal(a).pow(++b)+"")
(et le point-virgule de fuite ne doit pas être pris en compte pour les fonctions lambda). Essayez-le en lignePyth,
108 octetsEssayez-le en ligne ici .
Enregistré 2 octets grâce à FryAmTheEggman, code précédent
fq;l{j^QT;
la source
T
dans l'opération d'alimentation.Gelée ,
1211 octetsEssayez-le en ligne!
Comment ça fonctionne
la source
Nettoyer ,
107101 octetsEssayez-le en ligne!
Prend l'entrée comme
Integer
, retourneInt
la source
Wolfram Language (Mathematica) , 48 octets
Essayez-le en ligne!
la source
Attaché , 27 octets
Essayez-le en ligne!
Explication
Alternatives
28 octets:
${Generate{Unique@S[x^_]@9}}
29 octets:
${Generate{Unique[S[x^_]]@9}}
30 octets:
${Generate{#Unique[S[x^_]]>9}}
31 octets:
Generate@${{#Unique[S[x^_]]>9}}
32 octets:
${Generate[{#Unique[S[x^_]]>9}]}
33 octets:
${If[#Unique[x^y]>9,y,x&$!-~y]}&0
34 octets:
${If[#Unique[x^y]>9,y,$[x,y+1]]}&0
la source