Lo que debe hacer es crear una función / programa que tome un decimal como entrada y genere el resultado de tomar repetidamente el recíproco de la parte fraccionaria del número, hasta que el número se convierta en un entero.
Más específicamente, el proceso es el siguiente:
Deje x ser la entrada
Si x es un entero, envíelo.
De lo contrario: . Regrese a 2.
x x - ⌊ x ⌋ ⌊ x ⌋ x es el componente fraccionario de , y es igual a . es el piso de x, que es el mayor entero menor que .
Casos de prueba:
0 = 0
0.1 = 1/10 -> 10
0.2 = 1/5 -> 5
0.3 = 3/10 -> 10/3 -> 1/3 -> 3
0.4 = 2/5 -> 5/2 -> 1/2 -> 2
0.5 = 1/2 -> 2
0.6 = 3/5 -> 5/3 -> 2/3 -> 3/2 -> 1/2 -> 2
0.7 = 7/10 -> 10/7 -> 3/7 -> 7/3 -> 1/3 -> 3
0.8 = 4/5 -> 5/4 -> 1/4 -> 4
0.9 = 9/10 -> 10/9 -> 1/9 -> 9
1 = 1
3.14 = 157/50 -> 7/50 -> 50/7 -> 1/7 -> 7
6.28 = 157/25 -> 7/25 -> 25/7 -> 4/7 -> 7/4 -> 3/4 -> 4/3 -> 1/3 -> 3
Resumen de 0 a 1 en incrementos de 0.1: 0, 10, 5, 3, 2, 2, 2, 3, 4, 9, 1
Este es el código de golf , por lo que gana menos bytes.
Aclaraciones:
- "Puntos de bonificación" sin error de redondeo
- Debería funcionar para cualquier número racional no negativo (ignorando el error de redondeo)
- Puede, pero no tiene que dar salida a los pasos dados
- Puede tomar la entrada como un decimal, fracción o par de números, que pueden estar en una cadena.
Perdón por todos los problemas, esta es mi primera pregunta en este sitio web.
code-golf
math
arithmetic
recursion
rational-numbers
Solomon Ucko
fuente
fuente
Respuestas:
J, 18 bytes
En J, el idioma
u ^: v ^:_
significa "Sigue aplicando el verbou
mientras la condiciónv
devuelve verdadero.En nuestro caso, la condición final está definida por el gancho
~:<.
, lo que significa "el piso del número<.
no es igual~:
al número mismo", por lo que nos detendremos cuando el verbo principalu
devuelva un int.u
en este caso hay otro gancho-<.
, el número menos su piso, cuyo valor de retorno se alimenta al@
verbo recíproco%
.Pruébalo en línea!
fuente
_2{(%@-<.) ::]^:a:
.%@|~&1^:(~:<.)^:_
Python 3 , 101 bytes
Pruébalo en línea!
Formato: la cadena debe contener un punto decimal.
fuente
.replace(".","")
->.replace(*"._")
guardar 1 byteMathematica, 36 bytes
Manifestación
fuente
Rationalize
?Rationalize
, Mathematica cree que no hay suficiente precisión para generar todos los términos de la fracción continua. Por ejemplo,ContinuedFraction[0.1]
es justo{0}
.Perl 6 , 42 bytes
Pruébalo en línea!
El
nude
método devuelve el nu merator y de denominador de un número racional como una lista de dos elementos. Es más corto obtener el denominador de esta manera que llamar aldenominator
método directamente.fuente
Haskell , 47 bytes
Esto supera la respuesta de Wheat Wizard porque
GHC.Real
nos permite crear patrones de coincidencia en racionales usando:%
, además de tener un nombre más cortoPruébalo en línea!
f
toma unRational
número como entrada, aunque ghc permite que se escriban en formato decimal, con cierta precisión.fuente
Haskell ,
4034 bytesEditar:
(No pude resistir publicar esto después de ver las respuestas de Haskell con importaciones detalladas; ahora veo que algunas respuestas en otros idiomas también utilizan esencialmente este método).
!
toma dos argumentos enteros (numerador y denominador de la fracción; no es necesario que estén en términos más pequeños, pero el denominador debe ser positivo) y devuelve un entero. Llamar como314!100
.Pruébalo en línea!
n/d
(suponiendod
positiva) esmod n d/d
, por lo tantomod n d==0
, a menos que!
vuelva a aparecer con una representación ded/mod n d
.fuente
Python 3 + sympy , 67 bytes
Pruébalo en línea!
Sympy es un paquete matemático simbólico para Python. Debido a que es simbólico y no binario, no hay imprecisiones de coma flotante.
fuente
PHP , 69 bytes
Pruébalo en línea!
PHP , 146 bytes
Pruébalo en línea!
fuente
Jalea , 8 bytes
Pruébalo en línea!
Imprecisiones de punto flotante.
fuente
M
para fijar las inexactitudes de punto flotante: P . Es gelatina pero con precisión arbitraria matemática. Sin embargo, no soluciona el bucle 0.7.JavaScript ES6, 25 bytes
Llame
f(a,b)
paraa/b
fuente
gcd(a,b)=1
puede eliminar/b
Haskell ,
6261 bytesPruébalo en línea!
Utiliza la
Data.Ratio
biblioteca de Haskell para racionalidades arbitrarias de precisión. Si tan solo los nombres incorporados no fueran tan largos.fuente
Data.Ratio
. Nunca he oído hablar deGHC.Real
. Siéntase libre de publicar eso como su propia respuesta.APL (Dyalog Classic) , 18 bytes
Pruébalo en línea!
NARS APL, 18 caracteres
-1 byte gracias a la prueba de Uriel
fuente
⍵-⌊⍵
→1|⍵
por un byteSmalltalk, 33 bytes
fuente
Stax , 8 bytes
Ejecutar y depurarlo
"Puntos de bonificación" sin errores de precisión. No se utiliza aritmética de coma flotante. Esto (finalmente) hace uso del tipo racional incorporado de Stax.
fuente
JavaScript, 70 bytes
Si podemos cambiar el tipo de entrada a una cadena, entonces puede ahorrar 5 bytes.
fuente