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. :)
Respuestas:
Retina 0.8.2 ,
4350 bytesPruébalo en línea! I / O es como una cadena binaria. Codifique un número binario
y
cerca de otro número binario de laa
siguiente manera:a
no contiene un.
, sufijo uno.a
contiene un número impar de dígitos después del.
, sufijo a0
.y
es negativo, sufijo, de lo11
contrario sufijo10
.y
, sufijo0
seguido de ese dígito.y
contiene un.
sufijo11
en ese punto, de lo contrario sufrígalo después de todos los dígitosy
.Explicación:
Empareje los dígitos comenzando en el punto binario. Si el número es una codificación válida, decodifique el último
1x
par de dígitos en ay.
el segundo último en un-
signo opcional . Los dígitos anteriores se ignoran.Esto debería dejar solo pares que comiencen
0
, así que elimine el0
s.fuente
-.
. ¿Eso implica ceros o no se supone que se produzcan?*
s a+
s, eso garantizaría al menos un dígito antes y después del.
?.
. Sin embargo, creo que aún puedo garantizar un dígito antes.
..
no cambia su valor, pero dicho cambio en la entrada de su función cambia la salida. Tal vez se le permita arreglar esto suponiendo que la entrada no tenga tales 0s. Además, si agrupa pares desde la derecha, ¿cómo funciona "teóricamente para una entrada real"?11
agregado en el paso 2.)Jalea , 71 bytes
Pruébalo en línea!
Un programa completo que toma un número de base 10 como entrada y salida e implementa la función base 13 de Conway, pero usa las bases 7 y 10 en lugar de 10 y 13. Tanto la entrada como la salida usan una coma como separador decimal. La salida tendrá un líder - para números negativos.
fuente
retina ,
28252628 bytesPruébalo en línea!
Explicación
Puede generar ceros iniciales y finales, y números sin una parte entera.
Se podría jugar golf 2 o 3 bytes más si pudiera usar
4+
. Pero no estoy seguro de cómo definir el resultado teórico si la entrada tiene un flujo interminable de4
s.fuente