Herausforderung
Bei einer positiven Ganzzahl N
wird die Summe der ersten N
Reziprokwerte als exakter Bruch ausgegeben , der als ein Paar von Ganzzahlen in einer konsistenten Reihenfolge dargestellt wird, die Zähler und Nenner darstellt.
Regeln
Die Ausgabe muss exakt sein.
Die Ausgabe sollte als Ganzzahlenpaar in einer konsistenten Reihenfolge erfolgen, die Zähler und Nenner darstellt.
Die Verwendung von nicht ganzzahligen numerischen Typen (eingebaut oder Bibliothek) ist verboten.
- Erläuterung / Ausnahme: Nicht ganzzahlige numerische Typen sind nur dann in Ordnung, wenn alle verwendeten, berechneten und zurückgegebenen Werte Ganzzahlen sind (dh Ihre Sprache verwendet standardmäßig rationale Zahlen, aber Sie verwenden in Ihrer Antwort nur Ganzzahlarithmetik).
Die Leistung sollte so gering wie möglich sein. (
3/2
ist okay,6/4
ist nicht)Standardlücken sind verboten.
Übermittlungen sollten für Eingaben von mindestens 20 oder für dieses Meta funktionieren , je nachdem, welches höher ist.
Testfälle
1: 1/1
2: 3/2 (1/1 + 1/2)
3: 11/6 (1/1 + 1/2 + 1/3)
4: 25/12 etc.
5: 137/60
6: 49/20
20: 55835135/15519504
56: 252476961434436524654789/54749786241679275146400
226: 31741146384418617995319820836410246588253008380307063166243468230254437801429301078323028997161/5290225078451893176693594241665890914638817631063334447389979640757204083936351078274058192000
Testfallgenerierung (Python 3)
import fractions
def f(x):
return sum(fractions.Fraction(1,i) for i in range(1,x+1))
Ähnlich wie diese Herausforderung und diese Herausforderung .
Zähler sind OEIS A001008 und Nenner sind OEIS A002805 .
quelle
gcd
eine "eingebaute Funktion", wenn Ihre Sprache es bietet?gcd
und andere eingebaute Funktionen sind in Ordnung. Rationale / gebrochene Typen sind nicht zulässig.Antworten:
Python 2 ,
8079 BytesProbieren Sie es online!
Gibt den Zähler und den Nenner aus.
Yay! MathJax-Unterstützung !!!! Man beobachtet:
Denken Sie dann an die Rekursion für positives Ergebnis im Umerator:n
N
und man kann nicht umhin, an denn !
D
enominator denkenauch rekursiv; also die .exec
Wir müssen den Reduced Fraction Piper mit einer GCD-Berechnung in der
while
Schleife bezahlen ; und dann sind wir fertig.quelle
Gelee , 10 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
J , 16 Bytes
Probieren Sie es online!
Führen Sie Beispiele aus
Wie es funktioniert
J , 9 Bytes, unter Verwendung des Bruchtyps
Probieren Sie es online!
J gibt Brüche für die Int-Int-Division an, wenn diese nicht teilbar sind.
quelle
2 x:1#.1%1+i.
als gültige Antwort gelten, oder ist dies eine ungültige Verwendung eines rationalen Typs?05AB1E , 10 Bytes
Probieren Sie es online!
Verwendet die gleiche Methode wie alle anderen Einträge. Die Ausgabe erfolgt in der Form
[denominator, numerator]
.quelle
Wolfram Language (Mathematica) , 30 Byte
Probieren Sie es online!
14 Byte, wenn eingebaute gebrochene Typen zulässig sind
Probieren Sie es online!
quelle
InputForm@HarmonicNumber
(24 Byte) gibt die Ausgabe in dem vom OP vorgegebenen Format aus.JavaScript (ES6), 60 Byte
Rückgabe
[numerator, denominator]
.Probieren Sie es online!
Wie?
Die Methode ähnelt der Python-Antwort von @ ChasBrown .
bis .b=0
Wir geben schließlich den reduzierten Zähler und den reduzierten Nenner .q / ap/a q/a
quelle
Perl 6 ,
5753 BytesProbieren Sie es online!
Ein anonymer Codeblock, der eine Ganzzahl annimmt und ein Tupel von zurückgibt
denominator, numerator
.Wenn wir Bruchteile verwenden könnten, wäre dies der viel einfachere 32-Byte-Typ:
Probieren Sie es online!
quelle
Oktave , 29 Bytes
Probieren Sie es online!
quelle
C ++ 17 (gcc) , 108 Bytes
Verwenden Sie nur Ganzzahlarithmetik:
Probieren Sie es online!
C ++ 17 (gcc) , 108 Bytes
Probieren Sie es online!
Wie unten, jedoch mit C ++ 17
std::gcd
.C ++ (gcc) , 109 Bytes
Probieren Sie es online!
Da C ++ keine native Bigint-Unterstützung hat, läuft dies definitiv über
n>20
.Benötigen:
import
Aussage.std::__gcd
.-O0
(Ich denke schon) sonst wird der Compiler optimierend/=a
.long
.Erläuterung:
a*d
auf die nächste Ganzzahl, indem Siea*d+.5
auflong
und zuweisenn
. Jetztn/d
ist die Ausgabe.std::__gcd
.quelle
auto a=0.
anstelle vondouble a=0
(1 Zeichen weniger) verwenden?Pari / GP , 34 Bytes
Probieren Sie es online!
17 Byte, wenn eingebaute gebrochene Typen zulässig sind
Probieren Sie es online!
quelle
MATL, 13 Bytes
Probieren Sie es auf MATL Online aus
Gleiche Methode wie in der @ Tennis 'Jelly-Antwort .
(Implizite Ausgabe, druckt zuerst den Nenner und dann den Zähler.)
Gleitkommaungenauigkeiten bedeuten, dass dies für n = 20 nicht funktioniert, da die Zwischenwerte zu groß sind.Es sieht so aus, als ob die Testfallausgabe ein Tippfehler war. Dies gibt dieselbe Antwort wie die anderen Antworten für n = 20 zurück.Hier ist eine integer-typerhaltende Version (25 Bytes), die ich in der Zwischenzeit ausprobiert habe, bevor ich dies herausgefunden habe:
25 Bytes, Eingabe bis zu 43
Probieren Sie es online!
Wandelt die Zahlen
uint64
vor der Bearbeitung in Zahlen um und führt die Arithmetik explizit in einer Schleife durch (ohne Verwendung vonprod
odersum
). Insbesondere werden die Teilzähler und Nenner bei jedem Schritt am Ende jeder Iteration durch ihre GCD dividiert. Dadurch wird der Eingabebereich auf bis zun
43 erhöht. Ein Teil des Codes basiert auf der Antwort von @Chas Brown auf Python.Alternative (ursprüngliche) Methode mit LCM anstelle von Fakultät:
1615 BytesProbieren Sie es auf MATL Online aus
quelle
Excel VBA, 141 Bytes
Überträgt Eingaben von
[A1]
und Ausgaben an die Konsole.Ungolfed und Kommentiert
quelle
Gleichstrom , 87 Bytes
Probieren Sie es online!
Auf diese Weise bleiben Zähler und Nenner in dieser Reihenfolge oben auf dem Stapel, wie dies in der Standardausgabe zulässig ist . Da
dc
es keinengcd
eingebauten Algorithmus gibt , verwendet dieser den euklidischen Algorithmus zur Berechnung desgcd
.quelle
Stax , 11 Bytes
Führen Sie es aus und debuggen Sie es
Erläuterung:
Wir wollen berechnen:
Also haben wir:
quelle
APL (NARS), 56 Zeichen, 112 Byte
Prüfung:
Reduzieren Sie in wenigen Worten die "Summenfunktion für 2 Bruchzahlen" (eine Bruchzahl ist eine Liste mit 2 ganzen Zahlen) auf der Menge:
das unten scheint falsch:
aber wenn ich die Art der Eingabe ändere als:
quelle
APL (Dyalog Unicode) ,
1512 BytesProbieren Sie es online!
Stillschweigende Funktion mit einem einzigen Argument
⍵
. Speichert ein Byte, indem entfernt wird,⌽
wenn der Nenner zuerst gedruckt werden darf.Danke @dzaima für 3 Bytes.
Wie:
quelle