Đưa ra một đầu vào của một số nguyên dương, xuất ra số bước cần thiết để tìm đầu vào thông qua tìm kiếm nhị phân bắt đầu từ 1.
Chúng tôi đang mô phỏng tìm kiếm nhị phân cho số nguyên được đưa ra làm đầu vào, trong đó người tìm kiếm mô phỏng có thể liên tục đoán một số nguyên và được cho biết liệu nó có quá cao, quá thấp hay chính xác hay không. Chiến lược tìm số nguyên như sau:
Đặt n là số nguyên được cho là đầu vào mà chúng ta đang cố gắng tìm.
Bắt đầu với số lần đoán là 1. (Đối với mỗi lần đoán, hãy tăng số bước (bất kể nó có đúng hay không), và ngay lập tức dừng và xuất tổng số bước nếu đoán đúng.)
Nhân đôi số lần đoán cho đến khi số lần đoán lớn hơn n (số mục tiêu). (Hoặc nếu nó đúng, nhưng điều đó đã được quy định trong quy tắc đoán đúng của chúng tôi được đề cập ở trên.)
Bây giờ, đặt giới hạn trên của công suất đầu tiên là 2 lớn hơn n (tức là số vừa đoán) và đặt giới hạn dưới của công suất 2 ngay bên dưới nó.
Lặp đi lặp lại đoán trung bình (làm tròn xuống) của giới hạn trên và giới hạn dưới. Nếu nó quá cao, đặt nó làm giới hạn trên. Nếu nó quá thấp, đặt nó làm giới hạn dưới. Thủ tục này được đảm bảo để cuối cùng dẫn đến một dự đoán chính xác.
Đây là một ví dụ, cho đầu vào của n = 21:
1 -> 2 -> 4 -> 8 -> 16 -> 32 -> 24 -> 20 -> 22 -> 21
\__________________________/
repeated doubling \________________________/
repeated averaging
Vì đây là mã golf , mã ngắn nhất tính bằng byte sẽ giành chiến thắng.
Dưới đây là tất cả các kết quả đầu ra từ n = 1 đến 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
Và đây là một số trường hợp thử nghiệm lớn hơn:
1234 -> 21
1337 -> 22
3808 -> 19
12345 -> 28
32768 -> 16
32769 -> 32
50000 -> 28