Étant donné une entrée d'un entier positif, affichez le nombre d'étapes nécessaires pour trouver l'entrée via une recherche binaire commençant à 1.
Nous simulons une recherche binaire de l'entier qui a été donné en entrée, dans laquelle le chercheur simulé peut deviner à plusieurs reprises un entier et être informé s'il est trop élevé, trop bas ou correct. La stratégie pour trouver l'entier est la suivante:
Soit n l'entier donné en entrée que nous essayons de trouver.
Commencez avec une supposition de 1. (Pour chaque supposition, augmentez le nombre d'étapes (indépendamment du fait que ce soit correct ou non), et arrêtez immédiatement et affichez le nombre total d'étapes si la supposition était correcte.)
Doublez la supposition à plusieurs reprises jusqu'à ce que la supposition soit supérieure à n (le nombre cible). (Ou si c'est correct, mais c'est déjà couvert par notre règle de supposition correcte mentionnée ci-dessus.)
Maintenant, définissez une limite supérieure de la première puissance de 2 supérieure à n (c'est-à-dire le nombre qui vient d'être deviné) et définissez une limite inférieure de la puissance de 2 directement en dessous.
Devinez à plusieurs reprises la moyenne (arrondie vers le bas) de la limite supérieure et de la limite inférieure. S'il est trop élevé, définissez-le comme limite supérieure. S'il est trop bas, définissez-le comme limite inférieure. Cette procédure est garantie pour éventuellement aboutir à une estimation correcte.
Voici un exemple, pour l'entrée de n = 21:
1 -> 2 -> 4 -> 8 -> 16 -> 32 -> 24 -> 20 -> 22 -> 21
\__________________________/
repeated doubling \________________________/
repeated averaging
Puisqu'il s'agit de code-golf , le code le plus court en octets gagnera.
Voici toutes les sorties de 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
Et voici quelques cas de test plus importants:
1234 -> 21
1337 -> 22
3808 -> 19
12345 -> 28
32768 -> 16
32769 -> 32
50000 -> 28