Recamáns Sequenz ist wie folgt definiert:
oder in Pseudocode:
a(0) = 0,
if (a(n - 1) - n) > 0 and it is not
already included in the sequence,
a(n) = a(n - 1) - n
else
a(n) = a(n - 1) + n.
Die ersten Nummern lauten ( OEIS A005132 ):
0, 1, 3, 6, 2, 7, 13, 20, 12, 21, 11, 22, 10, 23, 9, 24, 8, 25, 43, 62, 42, 63, 41, 18, 42
Wenn Sie diese Sequenz studieren, werden Sie feststellen, dass es beispielsweise Duplikate gibt a(20) = a(24) = 42
(0-indiziert). Wir nennen eine Nummer ein Duplikat, wenn sich in der Sequenz mindestens eine identische Nummer davor befindet.
Herausforderung:
Nehmen Sie eine Ganzzahleingabe k und geben Sie entweder die ersten k doppelten Zahlen in der Reihenfolge aus, in der sie als Duplikate in Recamáns Sequenz gefunden wurden, oder nur die k -te Zahl.
Diese ersten doppelten Zahlen sind:
42, 43, 78, 79, 153, 154, 155, 156, 157, 152, 265, 261, 262, 135, 136, 269, 453, 454, 257, 258, 259, 260, 261, 262
Ein paar Dinge zu beachten:
- a (n) zählt nicht als Duplikat, wenn in keine identischen Zahlen enthalten sind a (0) ... a (n-1) , auch wenn a (n + m) == a (n) .
- 42 steht vor 43, da das Duplikat vor dem Duplikat von 43 auftritt
- Die Reihenfolge ist nicht sortiert
- Auch in dieser Sequenz gibt es doppelte Elemente. Zum Beispiel sind sowohl die 12. als auch die 23. Ziffer 262 (0-indiziert).
Testfälle (0-indiziert)
k Output
0 42
9 152
12 262
23 262
944 5197
945 10023
10000 62114
Das ist Code-Golf , also gewinnt der kürzeste Code in jeder Sprache!
Erklärungen sind erwünscht!
43
vorher nichts ausgegeben 42
? Es erscheint zuerst in Recamáns Sequenz. Meinen Sie damit zuerst die Ausgabe, die zuerst als Duplikat erkannt wurde?