Geben Sie bei Eingabe einer positiven Ganzzahl die Anzahl der Schritte aus, die erforderlich sind, um die Eingabe über eine Binärsuche ab 1 zu finden.
Wir simulieren eine binäre Suche nach der als Eingabe angegebenen Ganzzahl, bei der der simulierte Sucher wiederholt eine Ganzzahl erraten und feststellen kann, ob sie zu hoch, zu niedrig oder korrekt ist. Die Strategie zum Finden der Ganzzahl lautet wie folgt:
Sei n die als Eingabe angegebene Ganzzahl, die wir zu finden versuchen.
Beginnen Sie mit einer Schätzung von 1. (Erhöhen Sie für jede Schätzung die Anzahl der Schritte (unabhängig davon, ob sie richtig war oder nicht) und stoppen Sie sofort und geben Sie die Gesamtzahl der Schritte aus, wenn die Schätzung richtig war.)
Verdoppeln Sie die Schätzung so oft, bis sie größer als n (die Zielzahl) ist. (Oder wenn es korrekt ist, dies aber bereits durch unsere oben erwähnte Richtigkeitsregel abgedeckt ist.)
Setzen Sie nun eine obere Grenze der ersten Potenz von 2, die größer als n ist (dh die Zahl, die gerade erraten wurde), und setzen Sie eine untere Grenze der Potenz von 2 direkt darunter.
Errate wiederholt den Durchschnitt (abgerundet) der oberen und unteren Schranke. Wenn es zu hoch ist, legen Sie es als obere Grenze fest. Wenn es zu niedrig ist, legen Sie es als Untergrenze fest. Dieser Vorgang führt garantiert zu einer korrekten Vermutung.
Hier ist ein Beispiel für die Eingabe von n = 21:
1 -> 2 -> 4 -> 8 -> 16 -> 32 -> 24 -> 20 -> 22 -> 21
\__________________________/
repeated doubling \________________________/
repeated averaging
Da es sich um Code-Golf , wird der kürzeste Code in Bytes gewinnen.
Hier sind alle Ausgaben von n = 1 bis 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
Und hier sind einige größere Testfälle:
1234 -> 21
1337 -> 22
3808 -> 19
12345 -> 28
32768 -> 16
32769 -> 32
50000 -> 28