Dans la représentation décimale de chaque nombre rationnel p/q
, vous avez une queue périodique, une tête non périodique et une section avant la virgule décimale au format suivant:
(before decimal point).(non-periodic)(periodic)
Quelques exemples:
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)
Le défi est d'échanger les parties périodiques et non périodiques, en laissant le before decimal point
seul, pour créer un nouveau nombre. Par exemple:
25/168 = 0.148809523... = (0).(148)(809523)
=> (0).(809523)(148) = 0.809523148148... = 870397/1080000
Si un nombre n'a pas de partie périodique, 0.25
transformez ce nombre en un nouveau nombre périodique, et vice versa.
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
Le défi
- Prenez une fraction
x
en entrée, une chaîne, deux entrées, un nombre rationnel ou toute autre méthode adaptée à votre langue. - Échangez les parties périodiques et non périodiques de la représentation décimale de
x
pour créer un nouveau nombre, en laissant la partie avant la décimale seule. La partie périodique démarre toujours dès que possible afin que la partie non périodique soit aussi courte que possible. Voici des exemples. - Renvoie le nombre échangé en tant que nouvelle fraction. L'entrée n'est pas nécessairement réduite alors que la sortie devrait l'être. Le format d'entrée peut différer du format de sortie.
- Le numérateur
p
dex
sera un entier avec une valeur absolue d'un million ou moins et le dénominateurq
dex
sera un entier non nul avec une valeur absolue d'un million ou moins. - Le numérateur
r
et le dénominateurs
du résultat ne sont pas garantis inférieurs à un million. Étant donné la longueur des parties périodiques de ces nombres, il est recommandé d'éviter la conversion directe en flottants. - C'est le golf de code. La réponse la plus courte en octets gagne.
Exemples
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
pourrait être représentée comme (0).()(142857)
ou (0).(1)(428571)
, 1
pourrait être représentée comme (1).()()
, (0).()(9)
, (0).()(99)
, (0).(9)(9)
, etc.
0
à la fin du cas de test 2 (10/7
):1428571/100000
devrait l'être1428571/1000000
.