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*A085765stattdessen.
Die Herausforderung
Geben Sie bei einer positiven Ganzzahl Ndas Ndritte 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 N0 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 5sollten also zu Ausgaben führen 9.
Hier ist eine naive CJam-Referenzimplementierung, die die ersten NZahlen generiert ( Nauf STDIN angegeben). Beachten Sie, dass Ihr Code nur das Nth-Element zurückgeben sollte, nicht das gesamte Präfix.
NAusdruck von A085765 aus , richtig?