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. :)
Respostas:
Retina 0.8.2 ,
4350 bytesExperimente online! E / S é como uma sequência binária. Codifique um número binário
y
próximo a outro número binário daa
seguinte maneira:a
não contiver um.
, sufixo um.a
contiver um número ímpar de dígitos após o.
, sufixo a0
.y
for negativo, sufixo;11
caso contrário, sufixo10
.y
, sufixo0
seguido por esse dígito.y
contiver um.
sufixo11
nesse ponto, coloque-o depois de todos os dígitosy
.Explicação:
Emparelhe os dígitos começando no ponto binário. Se o número for uma codificação válida, decodifique o último
1x
par de dígitos para ae.
o segundo último para um-
sinal opcional . Os dígitos anteriores são ignorados.Isso deve deixar apenas os pares que começam com
0
, então exclua os0
s.fonte
-.
. Isso implica zeros ou eles não deveriam ser produzidos?*
s para+
s, isso garantiria pelo menos um dígito antes e depois do.
?.
. Acho que ainda posso garantir um dígito antes do pensamento.
..
não altera seu valor, mas essa alteração na entrada da sua função altera a saída. Talvez você tenha permissão para corrigir isso assumindo que a entrada não possua 0s. Além disso, se você agrupar pares da direita, como isso "teoricamente funciona para qualquer entrada real"?11
anexado no passo 2.)Geléia , 71 bytes
Experimente online!
Um programa completo que usa um número de base 10 como entrada e saída e implementa a função base 13 do Conway, mas usando as bases 7 e 10 em vez de 10 e 13. Tanto a entrada quanto a saída usam vírgula como separador decimal. A saída terá um líder - para números negativos.
fonte
Retina ,
28.252628 bytesExperimente online!
Explicação
Pode gerar zeros à esquerda e à direita e números sem uma parte inteira.
Poderia ser jogado 2 ou 3 bytes a mais se eu pudesse usar
4+
. Mas não tenho certeza de como definir o resultado teórico se a entrada tiver um fluxo interminável de4
s.fonte