파이썬 3.5 194 181 169 152 149 146 바이트 :
( 2 바이트에 @ Sherlock9 덕분에! )
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
루프 로 들어가서 () 의 첫 번째에서 두 번째- 마지막 하위 목록 에있는 각 하위 목록의 동일한 수의 내용 을 list 의 마지막 하위 목록 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]]
그런 다음 while 루프에 들어가면 list의 각 서브리스트를 sublist y[:-1:]
의 동일한 수의 항목과 비교합니다 y[-1]
. 예를 들어 먼저 [[0],[1],[0]]
와를 비교 [1]
합니다. 마지막 하위 목록이의 나머지 부분에 있기 때문에 y
, 그것은 계속하고 비교하는 것 [[0,0],[0,1],[0,2]]
하고 [1,0]
. [1,0]
이제는 y
특정 순서 의 나머지 부분에 있지 않기 때문에 최소 미리 알림 순서이므로 [1,0]
올바르게 반환됩니다.