Mathematica, 82 ไบต์
ใช้รูปแบบการส่งจากคำตอบของ @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)&
การป้อนข้อมูล:
[17]
เอาท์พุท:
9999999999999999
และเกี่ยวข้องกับการโต้แย้งในความคิดเห็นที่ @ Jenny_mathy ตอบด้วย@Phoenix ... RepeatedTiming[]
แอปพลิเคชันที่ป้อน[17]
ให้
{0.000518, 9999999999999999}
ดังนั้นครึ่งมิลลิวินาที ไปที่อินพุตที่ใหญ่กว่าเล็กน้อย[2003]
:
{3.78, 99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999}
น้อยกว่า 4 วินาที
ตารางทดสอบ: ในจำนวนเต็มบวก 30 รายการแรกผลลัพธ์คือ
{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}
คำอธิบาย: เวทมนตร์ที่นี่เท่านั้นคือตัววนซ้ำแบบกำหนดเอง ("ตัววนซ้ำ" ในความหมาย CS ไม่ใช่ความหมายของนายท่าน)
n := If[ y>0 , y-- ; x++ , y=d ; d++ ; x=1]
ซึ่งทำหน้าที่เกี่ยวกับตัวแปรโกลบอลx
จำนวนผู้นำ "9" y
, จำนวนการติดตาม "0" และd
จำนวนหลักทั้งหมด เราต้องการวนซ้ำตามจำนวนหลักและสำหรับแต่ละตัวเลือกของตัวเลขให้เริ่มด้วย "0" และน้อยที่สุด "9" ดังนั้นสิ่งแรกที่รหัสทำคือเริ่มต้นd
ที่ 1 บังคับเป็นค่าที่ต้องการของ)x
ให้ 1 และy
0 ตัวทำซ้ำที่กำหนดเองตรวจสอบว่าสตริงของ "0" สามารถสั้นลง ถ้าเป็นเช่นนั้นสตริงของ "0" จะสั้นลงและเพิ่มสตริงของ "1" ต่อหนึ่ง หากไม่ใช่จะเป็นการเพิ่มจำนวนหลักตั้งค่าจำนวน "0" เป็นหนึ่งน้อยกว่าจำนวนหลักและตั้งค่าจำนวน "9" เป็น 1d
y