tło
Fraktali sekwencja stanowi sekwencje liczb całkowitych, gdzie można usunąć pierwsze wystąpienie każdej liczby całkowitej, a kończy się z tej samej kolejności, jak wcześniej.
Bardzo prosta taka sekwencja nazywa się parafrazami Kimberling . Zaczynasz od dodatnich liczb naturalnych:
1, 2, 3, 4, 5, 6, 7, 8, 9, ...
Następnie przeglądasz puste pola:
1, _, 2, _, 3, _, 4, _, 5, _, 6, _, 7, _, 8, _, 9, ...
A następnie wielokrotnie wypełniasz puste pola samą sekwencją (w tym puste):
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, ...
To nasza sekwencja fraktalna! Teraz weźmy częściowe sumy:
1, 2, 4, 5, 8, 10, 14, 15, 20, 23, 29, 31, 38, 42, 50, 51, 60, ...
Ale co jeśli powtórzymy ten proces? „Fraktalizuj” nową sekwencję (tj. Częściowe sumy uzyskane z powyższych kroków):
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, ...
I ponownie weź częściowe sumy:
1, 2, 4, 5, 9, 11, 16, 17, 25, 29, 39, 41, 55, 60, 75, 76, 96, ...
Spłucz, powtórz. Okazuje się, że proces ten jest zbieżny. Za każdym razem, gdy powtórzysz ten proces, większy prefiks sekwencji pozostanie stały. Po nieskończonej liczbie iteracji otrzymujesz OEIS A085765 .
Ciekawostka: ten proces zbiegnie się w tę samą sekwencję, nawet jeśli nie zaczniemy od liczb naturalnych, dopóki początkowa sekwencja zacznie się 1
. Jeśli oryginalna sekwencja zaczyna się od innej x
, otrzymalibyśmy x*A085765
zamiast tego.
Wyzwanie
Biorąc pod uwagę dodatnią liczbę całkowitą N
, N
wyślij element th zbieżnej sekwencji.
Możesz napisać program lub funkcję, przyjmując dane wejściowe przez STDIN (lub najbliższą alternatywę), argument wiersza poleceń lub argument funkcji i wypisując wynik przez STDOUT (lub najbliższą alternatywę), wartość zwracaną funkcji lub parametr funkcji (wyjściowej).
Możesz wybrać, czy indeks N
ma wartość 0 czy 1.
Przypadki testowe
Sekwencja zaczyna się od:
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
Więc wejście 5
powinno dać wynik 9
.
Oto naiwna implementacja CJam, która generuje pierwsze N
liczby (podane N
na STDIN). Zauważ, że twój kod powinien zwracać tylko ten N
element, a nie cały prefiks.
N
th termin A085765 , prawda?