Mathematica, 82 byte
Utilizzando lo schema di presentazione dalla risposta di @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)&
Ingresso:
[17]
Produzione:
9999999999999999
E rispetto alla tesi nei commenti a @ risposta di Jenny_mathy con @Phoenix ... RepeatedTiming[]
di applicazione all'ingresso [17]
dà
{0.000518, 9999999999999999}
quindi mezzo millisecondo. Andando ad un ingresso leggermente più grande, [2003]
:
{3.78, 99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999}
un po 'meno di 4 secondi.
Tabella dei test: sui primi 30 numeri interi positivi, i risultati sono
{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}
Spiegazione: l'unica magia qui è l'iteratore personalizzato ("iteratore" nel senso CS, non nel senso M'ma)
n := If[ y>0 , y-- ; x++ , y=d ; d++ ; x=1]
che agisce sulle variabili globali x
, il numero di "9" s iniziali y
, il numero di "0" s finali e d
il numero totale di cifre. Desideriamo scorrere il numero di cifre e, per ciascuna scelta del numero di cifre, iniziare con il maggior numero di "0" e il minimo di "9". Quindi la prima cosa che il codice fa è inizializzare d
a 1, forzando x
a 1 ed è il valore desiderato di .)y
a 0. L'iteratore personalizzato verifica che la stringa di "0" s possa essere abbreviata. In tal caso, accorcia la stringa di "0" di uno e aumenta la stringa di "1" di uno. In caso contrario, aumenta il numero di cifre, imposta il numero di "0" s su uno in meno rispetto al numero di cifre e imposta il numero di "9" s su 1.d
y