Python 3.5, 194 181 169 152 149 146 byte:
( Cảm ơn @ Sherlock9 vì 2 byte! )
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)
Hoạt động hoàn hảo, và cũng khá nhanh chóng. Tính toán cho chuỗi 100000
đầu ra còn lại tối thiểu [0, 1, 0, 0, 4, 5, 0, 1, 0, 10, 4, 4]
và chỉ mất khoảng 3 giây. Nó thậm chí còn có thể tính toán chuỗi cho đầu vào 1000000
(1 triệu), đầu ra [0, 1, 0, 0, 4, 1, 0, 1, 0, 1, 4, 1, 8, 10, 0, 9]
và mất khoảng 60 giây.
Giải trình
Về cơ bản những gì chức năng này thực hiện được trước hết là tạo ra một danh sách, y
với tất cả các j mod i
nơi j
là mỗi số nguyên trong phạm vi 0=>7
(bao gồm 7) và i
là mỗi số nguyên trong phạm vi 0=>100
. Chương trình sau đó đi vào một while
vòng lặp vô hạn và so sánh cùng một số lượng nội dung của từng danh sách con trong danh sách con thứ nhất đến thứ hai của danh sách con y
( y[:-1:]
) với cùng số lượng mục trong danh sách con cuối cùng ( y[-1]
) của danh sách y
. Khi sublist y[-1]
là khác nhau hơn bất kỳ sublist khác, vòng lặp được chia ra, và trình tự còn lại tối thiểu đúng được trả về.
Chẳng hạn, nếu đầu vào là 3, y
sẽ là:
[[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]]
Sau đó, khi nó đi vào vòng lặp while, nó sẽ so sánh từng danh sách con trong danh sách y[:-1:]
với cùng số lượng mục trong danh sách phụ y[-1]
. Ví dụ, đầu tiên nó sẽ so sánh [[0],[1],[0]]
và [1]
. Vì danh sách con cuối cùng nằm trong phần còn lại y
, nên nó sẽ tiếp tục và sau đó so sánh [[0,0],[0,1],[0,2]]
và [1,0]
. Vì [1,0]
bây giờ KHÔNG ở phần còn lại của y
thứ tự cụ thể đó, đó là chuỗi nhắc nhở tối thiểu, và do đó, [1,0]
sẽ được trả lại chính xác.