Was Sie tun müssen, ist eine Funktion / ein Programm zu erstellen, die eine Dezimalzahl als Eingabe verwendet und das Ergebnis der wiederholten Verwendung des Kehrwerts des Bruchteils der Zahl ausgibt, bis die Zahl eine Ganzzahl wird.
Insbesondere ist der Prozess wie folgt:
Sei x die Eingabe
Wenn x eine Ganzzahl ist, geben Sie sie aus.
Andernfalls: . Gehen Sie zurück zu 2.
ist die Bruchkomponente von und entspricht . ist der Boden von x, der die größte ganze Zahl kleiner als .
Testfälle:
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
Zusammenfassung für 0 bis 1 in Schritten von 0,1: 0, 10, 5, 3, 2, 2, 2, 3, 4, 9, 1
Dies ist Code-Golf , also gewinnen die wenigsten Bytes.
Erläuterungen:
- "Bonuspunkte" für keinen Rundungsfehler
- Sollte für jede nicht negative rationale Zahl funktionieren (ohne Rundungsfehler)
- Sie können, müssen aber nicht die durchgeführten Schritte ausgeben
- Sie können die Eingabe als Dezimalzahl, Bruch oder Zahlenpaar verwenden, das sich in einer Zeichenfolge befinden kann.
Entschuldigung für alle Probleme, dies ist meine erste Frage auf dieser Website.
code-golf
math
arithmetic
recursion
rational-numbers
Solomon Ucko
quelle
quelle
Antworten:
J, 18 Bytes
In J
u ^: v ^:_
bedeutet das Idiom "Wenden Sie das Verb weiter an,u
während die Bedingungv
true zurückgibt.In unserem Fall wird die Endbedingung durch den Hook definiert
~:<.
, was bedeutet, dass "der Boden der Zahl<.
nicht gleich~:
der Zahl selbst ist" - also hören wir auf, wenn das Hauptverbu
ein int zurückgibt.u
In diesem Fall handelt es sich um einen weiteren Hook-<.
- die Zahl minus dem Floor - dessen Rückgabewert in@
das reziproke Verb eingegeben wird%
.Probieren Sie es online aus!
quelle
_2{(%@-<.) ::]^:a:
.%@|~&1^:(~:<.)^:_
Python 3 , 101 Bytes
Probieren Sie es online aus!
Format: Die Zeichenfolge muss einen Dezimalpunkt enthalten.
quelle
.replace(".","")
->.replace(*"._")
Speichern Sie 1 ByteMathematica, 36 Bytes
Demo
quelle
Rationalize
?Rationalize
ist Mathematica der Ansicht, dass die Genauigkeit nicht ausreicht, um alle Terme des fortgesetzten Bruchs zu generieren. Zum BeispielContinuedFraction[0.1]
ist nur{0}
.Perl 6 , 42 Bytes
Probieren Sie es online aus!
Die
nude
Methode gibt den Nu merator und den De- Nominator einer rationalen Zahl als Zwei-Elemente-Liste zurück. Es ist kürzer, den Nenner auf diese Weise zu erhalten, als diedenominator
Methode direkt aufzurufen .quelle
Haskell , 47 Bytes
Dies übertrifft die Antwort von Wheat Wizard, da
GHC.Real
wir die Übereinstimmung von Rationals mit:%
einem kürzeren Namen festlegen könnenProbieren Sie es online aus!
f
nimmt eineRational
Zahl als Eingabe, obwohl ghc es erlaubt, sie in einem Dezimalformat mit einer bestimmten Genauigkeit zu schreiben.quelle
Haskell ,
4034 BytesBearbeiten:
(Konnte nicht widerstehen, dies zu veröffentlichen, nachdem ich Haskell-Antworten mit ausführlichen Importen gesehen habe - jetzt sehe ich, dass einige andere Sprachantworten im Wesentlichen diese Methode verwenden.)
!
Nimmt zwei ganzzahlige Argumente (Zähler und Nenner des Bruchs; sie müssen nicht kleinstmöglich sein, aber der Nenner muss positiv sein) und gibt eine Ganzzahl zurück. Rufen Sie an als314!100
.Probieren Sie es online aus!
n/d
(unter der Annahme ,d
positiv) istmod n d/d
, so sei dennmod n d==0
,!
rekursiv mit einer Darstellungd/mod n d
.quelle
Python 3 + Sympy , 67 Bytes
Probieren Sie es online aus!
Sympy ist ein symbolisches Mathematikpaket für Python. Da es symbolisch und nicht binär ist, gibt es keine Gleitkomma-Ungenauigkeiten.
quelle
PHP , 69 Bytes
Probieren Sie es online aus!
PHP , 146 Bytes
Probieren Sie es online aus!
quelle
Gelee , 8 Bytes
Probieren Sie es online aus!
Gleitkomma-Ungenauigkeiten.
quelle
M
P: Floating-Point - Ungenauigkeiten zu beheben . Es ist Gelee, aber mit willkürlicher Präzisionsmathematik. Behebt die 0.7-Schleife jedoch nicht.JavaScript ES6, 25 Bytes
Rufen Sie
f(a,b)
ana/b
quelle
gcd(a,b)=1
kann entfernen/b
Haskell ,
6261 BytesProbieren Sie es online aus!
Verwendet Haskells
Data.Ratio
Bibliothek für willkürliche Präzisionsrationalisierungen. Wenn nur die eingebauten Namen nicht so lang wären.quelle
Data.Ratio
. Ich habe noch nie davon gehörtGHC.Real
. Fühlen Sie sich frei, dies als Ihre eigene Antwort zu posten.APL (Dyalog Classic) , 18 Bytes
Probieren Sie es online aus!
APL NARS, 18 Zeichen
-1 Byte dank Uriel-Test
quelle
⍵-⌊⍵
→1|⍵
für ein ByteSmalltalk, 33 Bytes
quelle
Stax , 8 Bytes
Führen Sie es aus und debuggen Sie es
"Bonuspunkte" für keine Präzisionsfehler. Keine Gleitkomma-Arithmetik verwendet. Dies nutzt (endlich) den in rax eingebauten rationalen Typ.
quelle
JavaScript, 70 Bytes
Wenn wir den Eingabetyp in eine Zeichenfolge ändern können, werden möglicherweise 5 Byte eingespart.
quelle