กำหนดอินพุตของจำนวนเต็มบวกเอาท์พุทจำนวนขั้นตอนที่ใช้ในการค้นหาอินพุตผ่านการค้นหาไบนารีเริ่มต้นที่ 1
เรากำลังจำลองการค้นหาแบบไบนารีสำหรับจำนวนเต็มที่ได้รับเป็นอินพุตซึ่งผู้ค้นหาแบบจำลองสามารถเดาเลขจำนวนเต็มซ้ำ ๆ และได้รับการบอกว่ามันสูงเกินไปต่ำเกินไปหรือถูกต้อง กลยุทธ์สำหรับการค้นหาจำนวนเต็มมีดังนี้:
ให้ n เป็นจำนวนเต็มที่ระบุเป็นอินพุตที่เราพยายามค้นหา
เริ่มต้นด้วยการเดา 1 (สำหรับทุกการเดาให้เพิ่มจำนวนขั้นตอน (โดยไม่คำนึงว่าถูกต้องหรือไม่) และหยุดทันทีและส่งออกจำนวนขั้นตอนทั้งหมดหากเดาถูกต้อง)
เพิ่มการเดาซ้ำสองครั้งจนกว่าการคาดเดาจะมากกว่า n (หมายเลขเป้าหมาย) (หรือถ้ามันถูกต้อง แต่กฎนี้ถูกครอบคลุมโดยกฎการเดาที่ถูกต้องของเราที่กล่าวถึงข้างต้น)
ทีนี้ตั้งขอบเขตบนของกำลังแรกของ 2 ที่มากกว่า n (เช่นจำนวนที่เดาได้) และตั้งขอบเขตล่างของกำลัง 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