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*A085765zamiast tego.
Wyzwanie
Biorąc pod uwagę dodatnią liczbę całkowitą N, Nwyś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 Nma 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 5powinno dać wynik 9.
Oto naiwna implementacja CJam, która generuje pierwsze Nliczby (podane Nna STDIN). Zauważ, że twój kod powinien zwracać tylko ten Nelement, a nie cały prefiks.
Nth termin A085765 , prawda?