Seu desafio:
Você está no 0º andar de um edifício infinitamente alto. Em qualquer andar, você pode caminhar até a janela e soltar um ovo. Seu objetivo é descobrir o piso mais alto que o ovo possa suportar sem quebrar. No entanto, você tem no máximo três ovos para descobrir isso, mas precisa minimizar o número de tentativas.
Em termos formais:
- Você recebe uma função
f(n)
que retornabool(n <= X)
para um desconhecidoX
, onde0 <= X
- Você deve retornar o valor de
X
(sem acessá-lo diretamente) f(n)
deve retornar apenasFalse
um máximo de3
vezes (em um único caso de teste). Se retornarFalse
mais do que isso, sua resposta será desqualificada.
Restrições
Sua pontuação é o número total de chamadas feitas f(n)
(nos casos de teste abaixo)
Se desejar, você pode deixar de passar uma função e simplesmente "simular" a situação acima. No entanto , seu algoritmo de solução não deve saber nada X
.
Seu algoritmo não deve codificar os casos de teste, ou no máximo X
. Se eu regenerar os números ou adicionar mais, seu programa deve ser capaz de lidar com eles (com uma pontuação semelhante).
Se o seu idioma não suportar números inteiros de precisão arbitrários, você poderá usar o long
tipo de dados. Se o seu idioma também não for compatível, você estará sem sorte.
O enésimo caso de teste é gerado usando o seguinte:
g(n) = max(g(n-1)*random(1,1.5), n+1), g(0) = 0
ou aproximadamente 1.25^n
Casos de teste:
0,1,2,3,4,6,7,8,10,14,15,18,20,27,29,40,57,61,91,104,133,194,233,308,425,530,735,1057,1308,1874,2576,3162,3769,3804,4872,6309,7731,11167,11476,15223,15603,16034,22761,29204,35268,42481,56238,68723,83062,95681,113965,152145,202644,287964,335302,376279,466202,475558,666030,743517,782403,903170,1078242,1435682,1856036,2373214,3283373,4545125,6215594,7309899,7848365,8096538,10409246,15103057,20271921,22186329,23602446,32341327,33354300,46852754,65157555,93637992,107681394,152487773,181996529,225801707,324194358,435824227,579337939,600264328,827690923,1129093889,1260597310,1473972478,1952345052,1977336057,2512749509,3278750235,3747691805,5146052509
Este é um desafio de código e a pessoa com a pontuação mais baixa ganha!