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!
43vorher nichts ausgegeben 42? Es erscheint zuerst in Recamáns Sequenz. Meinen Sie damit zuerst die Ausgabe, die zuerst als Duplikat erkannt wurde?