Die Stern-Brocot-Sequenz ist eine Fibonnaci-ähnliche Sequenz, die wie folgt konstruiert werden kann:
- Initialisieren Sie die Sequenz mit
s(1) = s(2) = 1
- Zähler setzen
n = 1
- Anhängen
s(n) + s(n+1)
An die Sequenz - Anhängen
s(n+1)
An die Sequenz - Inkrementieren
n
, kehren Sie zu Schritt 3 zurück
Dies ist äquivalent zu:
Unter anderem kann die Stern-Brocot-Sequenz verwendet werden, um jede mögliche positive rationale Zahl zu erzeugen. Jede rationale Zahl wird genau einmal generiert und erscheint immer in ihrer einfachsten Form. ist zum Beispiel 1/3
die 4. rationale Zahl in der Folge, aber die entsprechenden Zahlen 2/6
,3/9
usw. wird nicht angezeigt.
Wir können die n-te rationale Zahl als definieren r(n) = s(n) / s(n+1)
, wos(n)
oben beschrieben die n-te Stern-Brocot-Zahl ist.
Ihre Herausforderung besteht darin, ein Programm oder eine Funktion zu schreiben, die die mit der Stern-Brocot-Sequenz erzeugte n-te rationale Zahl ausgibt.
- Die oben beschriebenen Algorithmen sind 1-indiziert; Wenn Ihr Eintrag 0-indiziert ist, geben Sie dies bitte in Ihrer Antwort an
- Die beschriebenen Algorithmen dienen nur zur Veranschaulichung. Die Ausgabe kann nach Belieben abgeleitet werden (außer durch Hardcodierung).
- Die Eingabe kann über STDIN, Funktionsparameter oder einen anderen sinnvollen Eingabemechanismus erfolgen
- Ausgang kann STDOUT, Konsole, Funktionsrückgabewert oder jeder andere sinnvolle Ausgabestream sein
- Ausgang muss als Zeichenkette in der Form sein
a/b
, in dera
undb
sind die entsprechenden Einträge in der Stern-Brocot Sequenz. Die Auswertung des Bruchs vor der Ausgabe ist nicht zulässig. Bei der Eingabe12
sollte die Ausgabe beispielsweise2/5
nicht sein0.4
. - Standardlücken sind nicht zulässig
Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Testfälle
Die Testfälle sind hier 1-indiziert.
n r(n)
-- ------
1 1/1
2 1/2
3 2/1
4 1/3
5 3/2
6 2/3
7 3/1
8 1/4
9 4/3
10 3/5
11 5/2
12 2/5
13 5/3
14 3/4
15 4/1
16 1/5
17 5/4
18 4/7
19 7/3
20 3/8
50 7/12
100 7/19
1000 11/39
OEIS-Eintrag: A002487
Exzellentes Numberphile-Video zur Sequenz: Unendliche Brüche
True/2
ist kein gültiger Bruch (soweit es mich betrifft). Übrigens True
nicht immer 1
- einige Sprachen verwenden -1
stattdessen, um mögliche Fehler beim Anwenden bitweiser Operatoren zu vermeiden. [Zitieren benötigt]
True
gleichbedeutend mit 1
und True/2
wäre 1/2
.
True
s anstelle von1
s verwenden?