Implemente o algoritmo de pesquisa binária conforme usado para identificar a revisão do código fonte que interrompe um programa de software de computador. Sua ferramenta deve usar dois argumentos, especificando a revisão numerada mais antiga e mais recente a ser pesquisada (dois inteiros positivos), e você tem duas opções para fazer comparações:
Execute o comando shell
./test N
, onde N é o número da revisão. Se o teste for aprovado ( ou seja, a revisão for boa), ele retornará o código de saída 0.Chame a função
test(N)
, que retornarátrue
se o teste for aprovado,false
caso contrário.
A saída padrão deve ser o número da primeira revisão incorreta e tente tornar o código-fonte da sua ferramenta o mais curto possível. Aproveitar!
test(N)
opção de função principalmente para ser justo com as linguagens de programação sem uma maneira padrão de executar comandos do shell, como JavaScript.Respostas:
Ruby -
92 82 6260 caracteresA iterativa é bem mais curta, mas nem de longe tão legal quanto a cauda recursiva.
O método recursivo da cauda antiga para referência
Script de teste
Usa um pouco de mágica para injetar a
test
função e executa um arquivo que consiste apenas no código acima.Resultado:
fonte
Python, 64 caracteres
Este é recursivo, então sobrecarregará a pilha para uma entrada realmente grande
teste de execução
saídas
fonte
Python - 77 caracteres
Abusando do módulo python bisect. L é o valor baixo, H é o valor alto
aqui está um teste
saídas
Explicação:
Aqui está como o bisseto é definido. Basicamente, ele espera uma lista e decide se deve dividir para cima ou para baixo com base no valor que encontra olhando
a[mid]
. Isto chama__getitem__
ema
que em vez de ser uma lista, é uma classe que eu me definido.fonte
Python - 70 caracteres
teste de execução
saídas
fonte