Mathematica, 82 octets
Utilisation du modèle de soumission de la réponse de @Jenny_mathy ...
(d=x=1;y=0;f:=(10^x-1)10^y;n:=If[y>0,y--;x++,y=d;d++;x=1];While[Mod[f,#]!=0,n];f)&
Contribution:
[17]
Sortie:
9999999999999999
Et par rapport à l'argument dans les commentaires à la réponse de @ Jenny_mathy avec @Phoenix ... RepeatedTiming[]
d'application à l'entrée [17]
donne
{0.000518, 9999999999999999}
donc une demi-milliseconde. Aller à une entrée un peu plus grand, [2003]
:
{3.78, 99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999}
un peu moins de 4 secondes.
Tableau de test: Sur les 30 premiers entiers positifs, les résultats sont
{9, 90, 9, 900, 90, 90, 999999, 9000, 9, 90, 99, 900, 999999,
9999990, 90, 90000, 9999999999999999, 90, 999999999999999999, 900,
999999, 990, 9999999999999999999999, 9000, 900, 9999990, 999,
99999900, 9999999999999999999999999999, 90}
Explication: La seule magie ici est l'itérateur personnalisé ("itérateur" dans le sens CS, pas le sens M'ma)
n := If[ y>0 , y-- ; x++ , y=d ; d++ ; x=1]
qui agit sur les variables globales x
, le nombre de "9" de tête y
, le nombre de "0" de fin et d
le nombre total de chiffres. Nous souhaitons parcourir le nombre de chiffres et, pour chaque choix de nombre de chiffres, commencer par le plus de "0" et le moins de "9". Ainsi, la première chose que le code fait est d'initialiser d
à 1, le forçage est la valeur souhaitée de .)x
à 1 ety
à 0. L'itérateur personnalisé vérifie que la chaîne de "0" peut être raccourcie. Si tel est le cas, il raccourcit la chaîne de "0" de un et augmente la chaîne de "1" de un. Sinon, il incrémente le nombre de chiffres, définit le nombre de "0" à un de moins que le nombre de chiffres et définit le nombre de "9" à 1.d
y