In der Dezimaldarstellung jeder rationalen Zahl p/q
haben Sie ein periodisches Ende, einen nichtperiodischen Kopf und einen Abschnitt vor dem Dezimalpunkt im folgenden Format:
(before decimal point).(non-periodic)(periodic)
Einige Beispiele sind:
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)
Die Herausforderung besteht darin, die periodischen und nichtperiodischen Teile auszutauschen und dabei die before decimal point
Ruhe zu lassen, um eine neue Nummer zu erstellen. Beispielsweise:
25/168 = 0.148809523... = (0).(148)(809523)
=> (0).(809523)(148) = 0.809523148148... = 870397/1080000
Wenn eine Zahl keinen periodischen Teil wie hat, 0.25
verwandle diese Zahl in eine neue periodische Zahl und umgekehrt.
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
Die Herausforderung
- Nehmen Sie einen Bruch
x
als Eingabe, eine Zeichenfolge, zwei Eingaben, eine rationale Zahl oder eine andere Methode, die zu Ihrer Sprache passt. - Tauschen Sie den periodischen und den nichtperiodischen Teil der Dezimaldarstellung aus
x
, um eine neue Zahl zu erstellen, und lassen Sie den Teil vor der Dezimalstelle allein. Der periodische Teil beginnt immer so schnell wie möglich, damit der nichtperiodische Teil so kurz wie möglich ist. Beispiele sind unten. - Geben Sie die getauschte Nummer als neuen Bruch zurück. Die Eingabe wird nicht unbedingt reduziert, obwohl die Ausgabe sein sollte. Das Eingabeformat darf vom Ausgabeformat abweichen.
- Der Zähler
p
vonx
ist eine ganze Zahl mit einem absoluten Wert von einer Million oder weniger und der Nennerq
vonx
ist eine ganze Zahl ungleich Null mit einem absoluten Wert von einer Million oder weniger. - Der Zähler
r
und Nenners
des Ergebnisses beträgt garantiert nicht weniger als eine Million. Angesichts der Länge der periodischen Teile dieser Zahlen wird empfohlen, keine direkte Konvertierung in Gleitkommazahlen vorzunehmen. - Das ist Code Golf. Kürzeste Antwort in Bytes gewinnt.
Beispiele
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
könnte wie folgt dargestellt werden (0).()(142857)
oder (0).(1)(428571)
, 1
kann dargestellt werden (1).()()
, (0).()(9)
, (0).()(99)
, (0).(9)(9)
etc.
0
Ende von Testfall 2 (10/7
) fehlt :1428571/100000
sollte sein1428571/1000000
.