양의 정수를 입력하면 1부터 시작하는 이진 검색을 통해 입력을 찾는 데 걸리는 단계 수를 출력합니다.
우리는 입력으로 주어진 정수에 대한 이진 검색을 시뮬레이션하고 있습니다. 여기서 시뮬레이션 된 검색자는 반복적으로 정수를 추측하여 너무 높거나 너무 낮거나 정확한지 알 수 있습니다. 정수를 찾는 전략은 다음과 같습니다.
우리가 찾으려고하는 입력으로 주어진 정수를 n이라고하십시오.
1의 추측으로 시작하십시오. (모든 추측에 대해 단계 수를 늘리고 (정확한지 여부에 관계없이), 추측이 올바른 경우 즉시 총 단계 수를 중지하고 출력하십시오.)
추측이 n (목표 수)보다 클 때까지 반복하여 추측을 두 배로하십시오. (또는 그것이 맞다면, 그것은 이미 위에서 언급 한 우리의 올바른 추측 규칙에 의해 커버됩니다.)
이제 n보다 큰 2의 첫 번째 거듭 제곱의 상한 (즉, 추측 한 숫자)을 설정하고 바로 아래에 2의 거듭 제곱을 더한 값을 설정하십시오.
상한과 하한의 평균 (반올림)을 반복해서 추측하십시오. 너무 높으면 상한으로 설정하십시오. 너무 낮 으면 하한값으로 설정하십시오. 이 절차는 결국 정확한 추측을 보장합니다.
다음은 n = 21의 입력 예입니다.
1 -> 2 -> 4 -> 8 -> 16 -> 32 -> 24 -> 20 -> 22 -> 21
\__________________________/
repeated doubling \________________________/
repeated averaging
이것은 code-golf 이므로 바이트 단위의 가장 짧은 코드가 승리합니다.
다음은 n = 1에서 n = 100까지의 모든 출력입니다.
1
2
4
3
6
5
6
4
8
7
8
6
8
7
8
5
10
9
10
8
10
9
10
7
10
9
10
8
10
9
10
6
12
11
12
10
12
11
12
9
12
11
12
10
12
11
12
8
12
11
12
10
12
11
12
9
12
11
12
10
12
11
12
7
14
13
14
12
14
13
14
11
14
13
14
12
14
13
14
10
14
13
14
12
14
13
14
11
14
13
14
12
14
13
14
9
14
13
14
12
다음은 더 큰 테스트 사례입니다.
1234 -> 21
1337 -> 22
3808 -> 19
12345 -> 28
32768 -> 16
32769 -> 32
50000 -> 28