Python 3.5, 194 181 169 152 149 146 byte:
( Terima kasih kepada @ Sherlock9 untuk 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)
Bekerja dengan sempurna, dan juga cukup cepat. Menghitung urutan sisa 100000
output minimal[0, 1, 0, 0, 4, 5, 0, 1, 0, 10, 4, 4]
dan hanya membutuhkan waktu sekitar 3 detik. Bahkan bisa menghitung urutan untuk input 1000000
(1 juta), output [0, 1, 0, 0, 4, 1, 0, 1, 0, 1, 4, 1, 8, 10, 0, 9]
, dan butuh sekitar 60 detik.
Penjelasan
Pada dasarnya apa fungsi ini adalah pertama-tama membuat daftar,, y
dengan semua di j mod i
mana j
setiap bilangan bulat dalam kisaran 0=>7
(termasuk 7) dan i
setiap bilangan bulat dalam kisaran 0=>100
. Program kemudian masuk ke while
loop tak terbatas dan membandingkan jumlah konten yang sama dari masing-masing sublist dalam sublist pertama hingga kedua dari terakhir y
( y[:-1:]
) dengan jumlah item yang sama di sublist terakhir ( y[-1]
) daftar y
. Ketika sublist y[-1]
adalah berbeda daripada sublist lain, loop rusak dari, dan benar minimal urutan sisanya dikembalikan.
Misalnya, jika inputnya 3, y
akan menjadi:
[[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]]
Kemudian, ketika masuk ke loop sementara, ia membandingkan setiap sublist dalam daftar y[:-1:]
dengan jumlah item yang sama dalam sublist y[-1]
. Sebagai contoh, pertama-tama akan membandingkan [[0],[1],[0]]
dan [1]
. Karena sublist terakhir ada di sisa y
, itu akan melanjutkan dan kemudian membandingkan [[0,0],[0,1],[0,2]]
dan [1,0]
. Karena [1,0]
sekarang BUKAN dalam sisa y
dalam urutan tertentu , itu adalah urutan pengingat minimal, dan karena itu, [1,0]
akan dikembalikan dengan benar.