Dada a entrada de um número inteiro positivo, imprima o número de etapas necessárias para encontrar a entrada por meio de uma pesquisa binária iniciando em 1.
Estamos simulando uma pesquisa binária do número inteiro que foi dado como entrada, na qual o pesquisador simulado pode adivinhar repetidamente um número inteiro e saber se ele é muito alto, muito baixo ou correto. A estratégia para encontrar o número inteiro é a seguinte:
Seja n o número inteiro dado como entrada que estamos tentando encontrar.
Comece com um palpite de 1. (Para cada palpite, aumente o número de etapas (independentemente de estar ou não correto) e pare imediatamente e emita o número total de etapas, se a palpite estiver correta.
Duplique o palpite repetidamente até que o palpite seja maior que n (o número de destino). (Ou se estiver correto, mas isso já está coberto pela nossa regra de palpite correta mencionada acima.)
Agora, defina um limite superior da primeira potência de 2 maior que n (ou seja, o número que foi adivinhado) e defina um limite inferior da potência de 2 diretamente abaixo dela.
Adivinhe repetidamente a média (arredondada para baixo) do limite superior e do limite inferior. Se estiver muito alto, defina-o como o limite superior. Se estiver muito baixo, defina-o como o limite inferior. Este procedimento é garantido para eventualmente resultar em uma estimativa correta.
Aqui está um exemplo, para a entrada de n = 21:
1 -> 2 -> 4 -> 8 -> 16 -> 32 -> 24 -> 20 -> 22 -> 21
\__________________________/
repeated doubling \________________________/
repeated averaging
Como esse é o código-golfe , o código mais curto em bytes será vencedor.
Aqui estão todas as saídas de n = 1 para 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
E aqui estão alguns casos de teste maiores:
1234 -> 21
1337 -> 22
3808 -> 19
12345 -> 28
32768 -> 16
32769 -> 32
50000 -> 28