Según Wikipedia , una función fuertemente Darboux es
uno para el cual la imagen de cada intervalo abierto (no vacío) es toda la línea real
En otras palabras, una función es fuertemente Darboux si se les da 3 números reales arbitrarios , , y , siempre es posible encontrar un entre (distintos) y tal que .
Para los propósitos de este desafío, consideraremos fuertemente las funciones de Darboux sobre los racionales.
Su desafío es escribir un programa o función que:
- da un número racional como salida para cada entrada de número racional,
- siempre da la misma salida para una entrada dada, y
- tiene la propiedad fuertemente Darboux.
La entrada y salida pueden ser cualquiera de los siguientes:
- un tipo de número de precisión arbitraria, si su idioma tiene uno (o tiene una biblioteca para uno, por ejemplo, GMP).
- una representación en cadena del número, que puede suponer que siempre contendrá un punto decimal y al menos un dígito a cada lado. Puede estar en cualquier base , pero la entrada y la salida deben estar en la misma base. Puede usar cualquier conjunto de caracteres para los dígitos y el punto decimal (pero nuevamente, deben ser consistentes entre la entrada y la salida).
La entrada siempre tendrá una expansión de base terminación . En cuanto a la salida, que puede tener una expansión de base teóricamente no terminada según su elección de función, puede elegir cualquiera de los siguientes:
- dígitos de salida para siempre.
- tome un entero adicional como entrada y salida al menos esa cantidad de dígitos.
- generar al menos tantos dígitos como los de la entrada (que puede contener ceros finales).
Tenga en cuenta que, por la naturaleza de este desafío, la convención de que se puede suponer que los números son representables por tipos de números estándar no se aplica, excepto por la segunda entrada descrita en la opción 2 anterior.
Para evitar lagunas con funciones que solo se definen en racionales no terminados, su envío debe ser capaz de producir resultados arbitrariamente cercanos al valor deseado en la práctica . Formalmente, dados los números racionales , , , y , debe haber un número racional que termine en la base elegida de modo que y .
Para darle algunas ideas, aquí hay una descripción de la función base 13 de Conway :
- Convierta a base 13 y elimine el punto decimal.
- Si el resultado es de la forma , donde y consisten solo en dígitos del 0 al 9, entonces .
- Si el resultado es de la forma , donde y consisten solo en dígitos del 0 al 9, entonces .
- De lo contrario, .
Esta función es fuertemente Darboux. Digamos, por ejemplo, que queremos encontrar algo de entre y modo que . El valor base 13 satisfaría este requisito.
Su envío puede ser una implementación de esta función, aunque sospecho que hay otras funciones fuertemente Darboux que son mucho más cortas de implementar. :)