Wir alle wissen, dass jedes Mal, wenn eine rationale Zahl dezimal geschrieben wird, das Ergebnis entweder terminierend oder (irgendwann) periodisch ist. Wenn zum Beispiel 41/42 dezimal geschrieben wird, ist das Ergebnis
0.9 761904 761904 761904 761904 761904 761904 761904 ...
mit einer anfänglichen Folge von Ziffern, 0.9
gefolgt von der Folge, die 761904
immer und immer wieder wiederholt wird. (Eine bequeme Schreibweise hierfür ist, 0.9(761904)
wenn die Klammern den Ziffernblock umschließen.)
Ihr Ziel bei dieser Herausforderung ist es, eine positive rationale Zahl zu nehmen, die erste Ziffer zu löschen, die Teil der Wiederholungssequenz ist, und die resultierende rationale Zahl zurückzugeben. Wenn wir dies beispielsweise mit 41/42 tun, erhalten wir
0.9 61904 761904 761904 761904 761904 761904 761904 ...
oder 0.9(619047)
kurz: 101/105.
Wenn die rationale Zahl eine endende Dezimalerweiterung wie 1/4 = 0.25
hat, sollte nichts passieren. Sie können sich 1/4 entweder als 0.250000000...
oder als 0.249999999...
vorstellen, aber in beiden Fällen bleibt die Zahl unverändert, wenn Sie die erste Ziffer des sich wiederholenden Teils löschen.
Einzelheiten
- Die Eingabe ist eine positive rationale Zahl, entweder als Paar positiver Ganzzahlen, die Zähler und Nenner darstellen, oder (wenn Ihre Sprache dies zulässt und Sie möchten) als eine Art rationales Zahlenobjekt.
- Die Ausgabe ist auch eine rationale Zahl, auch in jeder Form. Wenn das Ergebnis eine Ganzzahl ist, können Sie die Ganzzahl anstelle einer rationalen Zahl zurückgeben.
- Wenn Sie ein Zahlenpaar als Eingabe verwenden, können Sie davon ausgehen, dass diese relativ prim sind. Wenn Sie ein Zahlenpaar als Ausgabe erzeugen, müssen Sie dafür sorgen, dass sie relativ prim sind.
- Achten Sie darauf, dass Sie die erste Ziffer finden, die einen Wiederholungsblock startet. Zum Beispiel könnte man 41/42 schreiben,
0.97(619047)
aber das macht 2041/2100 (mit der Dezimalerweiterung0.97(190476)
) nicht zu einer gültigen Antwort. - Sie können davon ausgehen , dass Sie in der Eingabe zu erhalten, die erste periodische Ziffer nach dem Komma, so dass
120/11
=10.909090909...
ungültige Eingabe: (seine erste periodische Ziffer könnte die in Betracht gezogen wird0
in10
). Sie können an solchen Eingaben alles tun, was Sie möchten. - Das ist Code-Golf : Die kürzeste Lösung gewinnt.
Testfälle
41/42 => 101/105
101/105 => 193/210
193/210 => 104/105
104/105 => 19/21
1/3 => 1/3
1/4 => 1/4
2017/1 => 2017/1
1/7 => 3/7
1/26 => 11/130
1234/9999 => 2341/9999
(2017,1)
.)
2/4
in der Eingabe passieren?
120/11
die richtige Antwort 111/11
oder 210/11
?
111/11
außer dass die derzeit am höchsten bewertete Antwort zurückkommt 210/11
. Ich werde Sie also auswählen lassen, um zu vermeiden, dass vorhandene Antworten ungültig werden.
2017
statt2017/1
?