Hintergrund
Eine fraktale Sequenz ist eine Ganzzahlsequenz, bei der Sie das erste Vorkommen jeder Ganzzahl entfernen und dieselbe Sequenz wie zuvor erhalten können.
Eine sehr einfache solche Folge nennt man Kimberlings Paraphrasen . Sie beginnen mit den positiven natürlichen Zahlen:
1, 2, 3, 4, 5, 6, 7, 8, 9, ...
Dann riffelst du ein paar Lücken:
1, _, 2, _, 3, _, 4, _, 5, _, 6, _, 7, _, 8, _, 9, ...
Und dann füllen Sie wiederholt die Lücken mit der Sequenz selbst (einschließlich der Lücken):
1, 1, 2, _, 3, 2, 4, _, 5, 3, 6, _, 7, 4, 8, _, 9, ...
1, 1, 2, 1, 3, 2, 4, _, 5, 3, 6, 2, 7, 4, 8, _, 9, ...
1, 1, 2, 1, 3, 2, 4, 1, 5, 3, 6, 2, 7, 4, 8, _, 9, ...
1, 1, 2, 1, 3, 2, 4, 1, 5, 3, 6, 2, 7, 4, 8, 1, 9, ...
Das ist unsere fraktale Sequenz! Nehmen wir nun die Teilsummen:
1, 2, 4, 5, 8, 10, 14, 15, 20, 23, 29, 31, 38, 42, 50, 51, 60, ...
Aber was ist, wenn wir diesen Prozess wiederholen? "Fraktalisieren" Sie die neue Sequenz (dh die aus den obigen Schritten erhaltenen Teilsummen):
1, _, 2, _, 4, _, 5, _, 8, _, 10, _, 14, _, 15, _, 20, _, 23, ...
1, 1, 2, _, 4, 2, 5, _, 8, 4, 10, _, 14, 5, 15, _, 20, 8, 23, ...
1, 1, 2, 1, 4, 2, 5, _, 8, 4, 10, 2, 14, 5, 15, _, 20, 8, 23, ...
1, 1, 2, 1, 4, 2, 5, 1, 8, 4, 10, 2, 14, 5, 15, _, 20, 8, 23, ...
1, 1, 2, 1, 4, 2, 5, 1, 8, 4, 10, 2, 14, 5, 15, 1, 20, 8, 23, ...
Und nimm nochmal die Teilsummen:
1, 2, 4, 5, 9, 11, 16, 17, 25, 29, 39, 41, 55, 60, 75, 76, 96, ...
Spülen, wiederholen. Es stellt sich heraus, dass dieser Prozess konvergiert. Jedes Mal, wenn Sie diesen Vorgang wiederholen, bleibt ein größeres Präfix der Sequenz festgelegt. Nach einer unendlichen Anzahl von Iterationen erhalten Sie OEIS A085765 .
Unterhaltsame Tatsache: Dieser Vorgang würde zu derselben Sequenz konvergieren, selbst wenn wir nicht von den natürlichen Zahlen ausgehen, solange die ursprüngliche Sequenz mit beginnt 1
. Wenn die ursprüngliche Sequenz mit einer anderen beginnt x
, erhalten wir x*A085765
stattdessen.
Die Herausforderung
Geben Sie bei einer positiven Ganzzahl N
das N
dritte Element der konvergierten Sequenz aus.
Sie können ein Programm oder eine Funktion schreiben, indem Sie eine Eingabe über STDIN (oder die nächstgelegene Alternative), ein Befehlszeilenargument oder ein Funktionsargument vornehmen und das Ergebnis über STDOUT (oder die nächstgelegene Alternative), einen Funktionsrückgabewert oder einen Funktionsparameter (out) ausgeben.
Sie können wählen, ob der Index auf N
0 oder 1 basiert.
Testfälle
Die Sequenz beginnt mit:
1, 2, 4, 5, 9, 11, 16, 17, 26, 30, 41, 43, 59, 64, 81, 82, 108, 117, 147, 151, 192, 203, 246, 248, 307, 323, 387, 392, 473, 490, 572, 573, 681, 707, 824, 833, 980, 1010, 1161, 1165, 1357, 1398, 1601, 1612, 1858, 1901, 2149, 2151, 2458, 2517
Eingaben 5
sollten also zu Ausgaben führen 9
.
Hier ist eine naive CJam-Referenzimplementierung, die die ersten N
Zahlen generiert ( N
auf STDIN angegeben). Beachten Sie, dass Ihr Code nur das N
th-Element zurückgeben sollte, nicht das gesamte Präfix.
N
Ausdruck von A085765 aus , richtig?