Python 3.5, 194 181 169 152 149 146 ไบต์:
( ขอบคุณ @ Sherlock9 สำหรับ 2 ไบต์! )
def r(o,c=0):
y=[[j%i for i in range(2,100)]for j in range(o+1)]
while 1:
c+=1;z=y[-1][:c]
if z not in[f[:c]for f in y[:-1]]:break
print(z)
ทำงานได้อย่างสมบูรณ์แบบและยังค่อนข้างรวดเร็ว การคำนวณหาลำดับ100000
เอาต์พุตที่เหลือน้อยที่สุด[0, 1, 0, 0, 4, 5, 0, 1, 0, 10, 4, 4]
และใช้เวลาประมาณ 3 วินาทีเท่านั้น มันสามารถคำนวณลำดับของอินพุต1000000
(1 ล้าน) ออกได้[0, 1, 0, 0, 4, 1, 0, 1, 0, 1, 4, 1, 8, 10, 0, 9]
และใช้เวลาประมาณ 60 วินาที
คำอธิบาย
โดยทั่วไปสิ่งที่ฟังก์ชั่นนี้จะเป็นตอนแรกสร้างรายการy
ที่มีทั้งหมดj mod i
ที่j
เป็นจำนวนเต็มในช่วงทุก0=>7
(รวม 7) และเป็นทุกจำนวนเต็มในช่วงi
0=>100
โปรแกรมจากนั้นจะเข้าสู่อนันต์while
ห่วงและเปรียบเทียบจำนวนเดียวกันของเนื้อหาของแต่ละรายการย่อยภายในครั้งแรกผ่านรายการย่อยที่สองไปสุดท้ายของy
( y[:-1:]
) ที่มีหมายเลขเดียวกันของรายการในรายการย่อยสุดท้าย ( y[-1]
) y
ของรายการ เมื่อรายการย่อยy[-1]
คือที่แตกต่างกันกว่ารายการย่อยอื่น ๆ ห่วงเสียออกจากและถูกต้องตามลำดับที่เหลือน้อยที่สุดจะถูกส่งกลับ
ตัวอย่างเช่นถ้าอินพุตเป็น 3 y
จะเป็น:
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], [1, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]]
จากนั้นเมื่อเข้าสู่ห่วงในขณะที่มันจะเปรียบเทียบแต่ละรายการย่อยในรายการที่y[:-1:]
มีจำนวนรายการเดียวกันในรายการy[-1]
ย่อย ยกตัวอย่างเช่นมันเป็นครั้งแรกจะเปรียบเทียบและ[[0],[1],[0]]
[1]
ตั้งแต่รายการย่อยสุดท้ายคือในส่วนที่เหลือของy
มันจะดำเนินการต่อแล้วเปรียบเทียบและ[[0,0],[0,1],[0,2]]
[1,0]
เนื่องจาก[1,0]
ขณะนี้ไม่ได้อยู่ในส่วนที่เหลือของy
ลำดับเฉพาะนั่นคือลำดับการเตือนที่น้อยที่สุดดังนั้น[1,0]
จะส่งคืนอย่างถูกต้อง