Secondo Wikipedia , una funzione fortemente di Darboux è
uno per il quale l'immagine di ogni intervallo aperto (non vuoto) è l'intera linea reale
In altre parole, una funzione è fortemente Darboux se dato 3 numeri reali arbitrari , , e , è sempre possibile trovare una tra (distinti) e tali che .
Ai fini di questa sfida, considereremo invece fortemente le funzioni di Darboux rispetto ai razionali.
La tua sfida è scrivere un programma o una funzione che:
- fornisce un numero razionale come output per ogni input di numero razionale,
- fornisce sempre lo stesso output per un determinato input e
- ha la proprietà fortemente Darboux.
L'input e l'output possono essere uno dei seguenti:
- un tipo di numero a precisione arbitraria, se la tua lingua ne ha uno (o ha una libreria per uno, ad esempio GMP).
- una rappresentazione in stringa del numero, che si può presumere, conterrà sempre un punto decimale e almeno una cifra su entrambi i lati. Può trovarsi in qualsiasi base , ma input e output devono trovarsi nella stessa base. È possibile utilizzare qualsiasi set di caratteri per le cifre e il punto decimale (ma, di nuovo, devono essere coerenti tra input e output).
L'ingresso avrà sempre un'espansione di base terminazione . Per quanto riguarda l'output, che può avere un'espansione di base teoricamente non terminante a seconda della scelta della funzione, è possibile scegliere una delle seguenti opzioni:
- cifre di uscita per sempre.
- accetta un numero intero aggiuntivo come input e output almeno di tante cifre.
- produce almeno tutte le cifre che ci sono nell'input (che può contenere zero finali).
Si noti che per la natura di questa sfida, non si applica la convenzione secondo cui i numeri possono essere considerati rappresentabili da tipi di numeri standard , ad eccezione del secondo input descritto nell'opzione 2 sopra.
Per evitare scappatoie con funzioni definite solo su razionali non terminanti, la tua presentazione deve essere in grado di produrre output arbitrariamente vicino al valore desiderato nella pratica . Formalmente, data numeri razionali , , , e , ci deve essere un numero razionale che termina con la vostra base scelti in modo che e .
Per darvi alcune idee, ecco una descrizione della funzione di base 13 di Conway :
- Converti in base 13 e rimuovi il punto decimale.
- Se il risultato è nella forma , dove e sono costituiti solo da cifre da 0 a 9, allora .
- Se il risultato è nella forma , dove e sono composti solo da cifre da 0 a 9, allora .
- Altrimenti, .
Questa funzione è fortemente Darboux. Supponiamo, ad esempio, che vogliamo trovare una tra e tale che . Il valore base-13 soddisferebbe questo requisito.
La tua richiesta potrebbe essere un'implementazione di questa funzione, anche se sospetto che ci siano altre funzioni fortemente di Darboux che sono molto più brevi da implementare. :)