일반적인 N 자리 콤비네이션 자물쇠는 N 개의 회전 디스크로 구성됩니다. 각 디스크에는 순서대로 0-9의 숫자가 새겨 져 있으므로 올바른 암호로 바꿔야합니다. 암호를 모르면 잠금을 해제하기 전에 최대 10N 번 시도해야 합니다. 흥미롭지 않습니다.
따라서 콤비네이션 자물쇠의 변형을 고려해보십시오.
거리 표시 잠금을 열지 못할 때마다 잠금 해제를위한 최소 이동 횟수에 응답합니다.
하나의 움직임은 한 위치에 의한 회전으로 정의됩니다. 예를 들어에서 890
로 이동하려면 1에서 로 899
이동하고에서에서 9로 이동 137
해야 952
합니다.
도전
암호를 알 수없는 거리 표시 잠금이 주어지면 프로그램이 너무 오래 걸리지 않도록 최소한의 시도 (움직이지 않음)로 잠금을 열어보십시오 .
규칙 및 점수
- stdin에서 출력하여 stdout으로 출력하는 전체 프로그램을 작성해야합니다. 프로그램은 다음과 같이 입력 / 출력을 수행해야합니다.
Start
Input an integer N (number of digits) from stdin
Do
Output a line containing decimal string of length N (your attempt) to stdout
Input an integer K (response of the lock) from stdin
While K not equal 0
End
프로그램은 최대 N = 200을 처리해야하며 모든 입력에서 5 초 미만을 실행해야합니다.
출력에서 선행 0은 생략하면 안됩니다.
길이마다 5 개의 테스트 데이터가 있으므로 총 테스트 데이터 수는 1000입니다. 테스트 데이터는 임의로 생성됩니다.
최종 점수는 (모든 테스트 데이터의 총 추측 횟수) * ln (코드 길이 (바이트) + 50)입니다. 최저 점수가 이깁니다. (ln은 자연 로그입니다)
나는 당신을 위해 프로그램을 득점합니다. 프로그램 점수를 매기는 방법을 알고 싶거나 스스로 점수를 매기려면 이 게시물의 이전 수정 사항을 살펴보십시오 .
이 과제는 2017/12/07 14:00 UTC에 종료됩니다. 그런 다음 솔루션을 게시합니다.
실행 예
로 시작하는 줄 >
은 입력 을 나타내고 다른 줄은 프로그램 출력을 나타냅니다.
당신은 당신의 마음에 암호를 가지고 그것을 테스트하기 위해 프로그램과 상호 작용할 수 있습니다.
> 3 # 3-digit lock. The hidden password is 746
000 # 1st guess (by program)
> 11 # response to the 1st guess
555 # 2nd guess
> 4 # ...
755
> 2
735
> 2
744
> 2
746 # finally the correct answer! The program attempts 6 times.
> 0 # this is not necessary
샘플 프로그램
편집 : 위의 입력 / 출력 형식이 명확하지 않을 수 있습니다. 다음은 Python의 샘플 프로그램입니다.
Python, 369 바이트, 총 시도 횟수 = 1005973, 점수 = 6073935
import sys
N = int(input()) # get the lock size
ans = ''
for i in range(N): # for each digit
lst = []
for j in range(10): # try all numbers
print('0' * i + str(j) + '0' * (N - i - 1)) # make a guess
result = int(input()) # receive the response
lst.append(result)
ans += str(lst.index(min(lst)))
print(ans) # output the final answer
도전을 단순화 한 Jonah 에게 감사드립니다 .
162751*ln(388+50)=989887
.