Sekwencja Recamana jest zdefiniowana następująco:
lub w pseudokodzie:
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.
Pierwsze liczby to ( 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
Jeśli przestudiujesz tę sekwencję, zauważysz, że istnieją duplikaty, na przykład a(20) = a(24) = 42(indeksowane 0). Będziemy nazywać numer duplikatem, jeśli przed nim jest co najmniej jeden identyczny numer.
Wyzwanie:
Weź liczbę całkowitą k i wypisz pierwsze k duplikatów liczb w kolejności, w jakiej zostały znalezione jako duplikaty w Sekwencji Recamána, lub tylko liczbę k -tą.
Te pierwsze zduplikowane numery to:
42, 43, 78, 79, 153, 154, 155, 156, 157, 152, 265, 261, 262, 135, 136, 269, 453, 454, 257, 258, 259, 260, 261, 262
Kilka rzeczy do zapamiętania:
- a (n) nie liczy się jako duplikat, jeśli nie ma identycznych liczb w (0) ... a (n-1) , nawet jeśli a (n + m) == a (n) .
- 42 będzie przed 43, ponieważ jego duplikat występuje przed duplikatem 43
- Sekwencja nie jest posortowana
- W tej sekwencji są również zduplikowane elementy. Na przykład, 12 i 23 liczba są równe 262 (indeksowane 0).
Przypadki testowe (indeksowane 0)
k Output
0 42
9 152
12 262
23 262
944 5197
945 10023
10000 62114
To jest golf golfowy , więc wygrywa najkrótszy kod w każdym języku!
Wyjaśnienia są zachęcane!
43dane wyjściowe nie są wcześniej 42? Najpierw pojawia się w sekwencji Recamána. Czy masz na myśli przede wszystkim wynik, który po raz pierwszy jest duplikatem?