Dada la entrada de un entero positivo, genera el número de pasos necesarios para encontrar la entrada a través de una búsqueda binaria que comienza en 1.
Estamos simulando una búsqueda binaria para el entero que se proporcionó como entrada, en la que el buscador simulado puede adivinar repetidamente un entero y saber si es demasiado alto, demasiado bajo o correcto. La estrategia para encontrar el número entero es la siguiente:
Sea n el entero dado como entrada que estamos tratando de encontrar.
Comience con una conjetura de 1. (Para cada conjetura, incremente el número de pasos (independientemente de si fue correcto o no) e inmediatamente deténgase y envíe el número total de pasos si la suposición fue correcta).
Duplique la suposición repetidamente hasta que la suposición sea mayor que n (el número objetivo). (O si es correcto, pero eso ya está cubierto por nuestra regla de conjetura correcta mencionada anteriormente).
Ahora, establezca un límite superior de la primera potencia de 2 que sea mayor que n (es decir, el número que se acaba de adivinar), y establezca un límite inferior de la potencia de 2 directamente debajo de él.
Adivine repetidamente el promedio (redondeado hacia abajo) del límite superior y el límite inferior. Si es demasiado alto, configúrelo como el límite superior. Si es demasiado bajo, configúrelo como el límite inferior. Se garantiza que este procedimiento finalmente dará como resultado una suposición correcta.
Aquí hay un ejemplo, para la entrada de n = 21:
1 -> 2 -> 4 -> 8 -> 16 -> 32 -> 24 -> 20 -> 22 -> 21
\__________________________/
repeated doubling \________________________/
repeated averaging
Como se trata de código golf , el código más corto en bytes ganará.
Aquí están todas las salidas de n = 1 a 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
Y aquí hay algunos casos de prueba más grandes:
1234 -> 21
1337 -> 22
3808 -> 19
12345 -> 28
32768 -> 16
32769 -> 32
50000 -> 28