Segundo a Wikipedia , uma função fortemente Darboux é
um para o qual a imagem de cada intervalo aberto (não vazio) é toda a linha real
Em outras palavras, uma função é fortemente Darboux se dado 3 números reais arbitrárias , , e , que é sempre possível encontrar um entre (distinta) e tal que .
Para os propósitos deste desafio, consideraremos fortemente as funções de Darboux sobre os racionais.
Seu desafio é escrever um programa ou função que:
- fornece um número racional como saída para cada entrada de número racional,
- sempre fornece a mesma saída para uma determinada entrada e
- possui a propriedade fortemente Darboux.
Entrada e saída podem ser uma das seguintes:
- um tipo de número de precisão arbitrária, se o seu idioma tiver um (ou uma biblioteca para um, por exemplo, GMP).
- uma representação de string do número, que você pode assumir sempre conterá um ponto decimal e pelo menos um dígito de cada lado. Pode estar em qualquer base , mas a entrada e a saída devem estar na mesma base. Você pode usar qualquer conjunto de caracteres para os dígitos e ponto decimal (mas, novamente, eles devem ser consistentes entre entrada e saída).
A entrada sempre terá uma expansão de base final . Quanto à saída, que pode ter uma expansão da base teoricamente não terminal, dependendo da sua opção de função, você pode escolher uma das seguintes opções:
- dígitos de saída para sempre.
- tome um número inteiro adicional como entrada e saída, pelo menos, com tantos dígitos.
- produz pelo menos quantos dígitos há na entrada (que podem conter zeros à direita).
Observe que, pela natureza desse desafio, a convenção de que números podem ser considerados representáveis por tipos de número padrão não se aplica, exceto pela segunda entrada descrita na opção 2 acima.
Para evitar brechas com funções definidas apenas em racionais não termináveis, sua submissão deve ser capaz de produzir uma saída arbitrariamente próxima a um valor desejado na prática . Formalmente, dado números racionais , , , e , deve haver um número racional que termina em sua base escolhida de tal forma que e .
Para lhe dar algumas idéias, aqui está uma descrição da função base 13 do Conway :
- Converta na base 13 e remova o ponto decimal.
- Se o resultado for do formato , onde e consistem apenas em dígitos de 0 a 9, então .
- Se o resultado for do formato , onde e consistem apenas em dígitos de 0 a 9, então .
- Caso contrário, .
Esta função é fortemente Darboux. Digamos, por exemplo, que queremos encontrar entre e modo que . O valor base-13 atenderia a esse requisito.
Seu envio pode ser uma implementação dessa função, embora eu suspeite que haja outras funções do Darboux fortemente muito mais curtas de implementar. :)