En la representación decimal de cada número racional p/q
, tiene una cola periódica, una cabeza no periódica y una sección antes del punto decimal en el siguiente formato:
(before decimal point).(non-periodic)(periodic)
Algunos ejemplos incluyen:
1/70 = 0.0142857... = (0).(0)(142857)
10/7 = 1.428571... = (1).()(428571) ## no non-periodic part
1/13 = 0.076923... = (0).()(076923)
3/40 = 0.075 = (0).(075)() ## no periodic part
-2/15 = -0.13... = -(0).(1)(3) ## negative
75/38 = 1.9736842105263157894... = (1).(9)(736842105263157894)
## periodic part longer than float can handle
25/168 = 0.148809523... = (0).(148)(809523)
120/99 = 40/33 = 1.212121... = (1).()(21)
2/1 = 2 = (2).()() ## no periodic, no non-periodic
0/1 = 0 = (0).()()
0/2 = 0 = (0).()()
299/792 = 0.37752... = (0).(377)(52)
95/-14 = -6.7857142... = -(6).(7)(857142)
-95/-14 = 6.7857142... = (6).(7)(857142)
El desafío es intercambiar las partes periódicas y no periódicas, dejando las before decimal point
solas, para crear un nuevo número. Por ejemplo:
25/168 = 0.148809523... = (0).(148)(809523)
=> (0).(809523)(148) = 0.809523148148... = 870397/1080000
Si un número no tiene una parte periódica como 0.25
convertir ese número en un nuevo número periódico, y viceversa.
1/4 = 0.25 = (0).(25)() => (0).()(25) = 0.252525... = 25/99
4/9 = 0.444444... = (0).()(4) => (0).(4)() = 0.4 = 2/5
5/1 = 5 = (5).()() => (5).()() = 5 = 5/1
El reto
- Tome una fracción
x
como entrada, como una cadena, dos entradas, un número racional o cualquier método que se adapte a su idioma. - Cambie las partes periódicas y no periódicas de la representación decimal de
x
para crear un nuevo número, dejando solo la parte anterior al decimal. La parte periódica siempre comienza lo antes posible para que la parte no periódica sea lo más corta posible. Los ejemplos están abajo. - Devuelve el número intercambiado como una nueva fracción. La entrada no se reduce necesariamente aunque la salida debería serlo. El formato de entrada puede diferir del formato de salida.
- El numerador
p
dex
será un número entero con un valor absoluto de un millón o menos y el denominadorq
dex
será un número entero distinto de cero con un valor absoluto de un millón o menos. - No se garantiza que el numerador
r
y el denominadors
del resultado sea inferior a un millón. Dada la longitud de las partes periódicas de estos números, se recomienda evitar la conversión directa a flotantes. - Este es el código de golf. La respuesta más corta en bytes gana.
Ejemplos
1/70 = (0).(0)(142857) => (0).(142857)(0) = (0).(142857)() = 0.142857 = 142857/1000000
10/7 = (1).()(428571) => (1).(428571)() = 1.428571 = 1428571/1000000
1/13 = (0).()(076923) => (0).(076923)() = 0.076293 = 76923/1000000
3/40 = (0).(075)() => (0).()(075) = 0.075075... = 75/999 = 25/333
-2/15 = -(0).(1)(3) => -(0).(3)(1) = -0.311111... = -28/90 = -14/45
75/38 = (1).(9)(736842105263157894)
=> (1).(736842105263157894)(9) = (1).(736842105263157895)() ## since 0.999... = 1
= 1.736842105263157895 = 1736842105263157895/1000000000000000000
= 347368421052631579/200000000000000000
25/168 = (0).(148)(809523) => (0).(809523)(148) = 0.809523148148... = 870397/1080000
120/99 = (1).()(21) => (1).(21)() = 1.21 = 121/100
2/1 = (2).()() => (2).()() = 2 = 2/1
0/1 = (0).()() => (0).()() = 0 = 0/1
0/2 = (0).()() => (0).()() = 0 = 0/1
299/792 = (0).(377)(52) => (0).(52)(377) = 0.52377377... = 2093/3996
95/-14 = -(6).(7)(857142) => -(6).(857142)(7) = -6.857142777... = -12342857/1800000
-95/-14 = (6).(7)(857142) => (6).(857142)(7) = 6.857142777... = 12342857/1800000
1/7
podría ser representado como (0).()(142857)
o (0).(1)(428571)
, 1
podría ser representado como (1).()()
, (0).()(9)
, (0).()(99)
, (0).(9)(9)
, etc.
0
al final del caso de prueba 2 (10/7
):1428571/100000
debería ser1428571/1000000
.