Sekwencja SUDSI ( su m, d ifference, s wap, i ncrement) to ciekawa sekwencja liczb całkowitych, która wydaje się wykazywać raczej chaotyczne zachowanie. Można go wygenerować w następujący sposób:
Niech S będzie nieskończona lista liczb naturalnych: 1 2 3 4 5 6 ...
. Niech S i oznaczają jeden indeksowane i ty element S . Tak więc początkowo S 1 to 1, S 2 to 2 itd. (Nie ma S 0 ).
Począwszy od S 1 i S 2 ...
- Oblicz ich sumę:
sum = S1 + S2
- Oblicz ich różnicę bezwzględną (większy minus minus mniejszy):
diff = |S1 - S2|
Zamień dwie wartości w S na wskaźniki sumy i różnicy:
swap(Ssum, Sdiff)
Zwiększ wskaźniki S, z którym pracujesz. Więc następnym razem obliczysz sumę i różnicę S 2 i S 3 , a następnym razem będzie S 3 i S 4 itd.
- Powtórz ten proces w nieskończoność.
Oto kilka pierwszych etapów S po zastosowaniu tego procesu. Nawiasy kwadratowe []
otaczają dwie wartości, które mają zostać zsumowane i zróżnicowane.
Oryginalny S :
[1 2] 3 4 5 6 7 8 9 10 11 12 ...
Po zamianie S 3 ( 3 = 1 + 2
) i S 1 ( 1 = |1 - 2|
):
3 [2 1] 4 5 6 7 8 9 10 11 12 ...
Po zamianie S 3 i S 1 :
1 2 [3 4] 5 6 7 8 9 10 11 12 ...
Po zamianie S 7 i S 1 :
7 2 3 [4 5] 6 1 8 9 10 11 12 ...
Po zamianie S 9 i S 1 :
9 2 3 4 [5 6] 1 8 7 10 11 12 ...
Po zamianie S 11 i S 1 :
11 2 3 4 5 [6 1] 8 7 10 9 12 ...
Po zamianie S 7 i S 5 :
11 2 3 4 1 6 [5 8] 7 10 9 12 ...
itp.
Sekwencja SUDSI jest zdefiniowana jako sekwencja pierwszych elementów na każdej z tych list. Tak więc kilka pierwszych warunków sekwencji SUDSI to 1 3 1 7 9 11 11
.
Oto pierwsze 200 terminów sekwencji SUDSI (20 na linię):
1 3 1 7 9 11 11 11 15 15 19 19 19 19 19 19 19 19 19 19
19 19 19 19 19 19 19 19 57 59 59 59 59 59 59 59 59 59 77 79
81 83 85 87 89 91 91 91 91 91 91 91 91 91 91 91 91 91 115 115
121 123 125 127 127 127 127 127 137 139 141 143 145 147 147 147 147 147 147 147
147 147 147 147 167 167 167 167 167 167 167 167 167 167 167 167 167 167 167 167
167 167 167 167 209 211 211 211 211 211 221 223 223 223 223 223 223 223 223 223
223 223 243 243 243 243 243 243 257 259 261 263 263 263 263 263 263 263 263 263
263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263 263
263 263 325 327 329 331 331 331 331 331 331 331 331 331 349 351 351 351 351 351
361 363 363 363 363 363 363 363 363 363 363 363 363 363 363 363 363 363 363 363
Nie jest (przynajmniej dla mnie) niejasne, jak można przewidzieć przyszłe warunki. Można jedynie bezpiecznie powiedzieć, że warunki są zawsze nieparzyste, nie maleją (po drugim semestrze) i że niektóre liczby są powtarzane wiele razy.
Wyzwanie
Napisz program lub funkcję, która przyjmuje dodatnią liczbę całkowitą n i wypisuje lub zwraca n- ty ciąg sekwencji SUDSI. Na przykład, jeśli n wynosi 1, wynikiem jest 1
, jeśli n wynosi 2, wynikiem jest3
, jeśli n wynosi 200, wynikiem jest 363
.
Weź dane w jakikolwiek zwykły sposób (stdin / linia poleceń / funkcja arg).
Najkrótsza odpowiedź w bajtach wygrywa.
(Ta strona koduje rzeczy w UTF-8, ale możesz użyć dowolnego istniejącego kodowania).
Premia matematyczna: (potencjalnie kwalifikująca się do nagrody)
- Opowiedz mi więcej o sekwencji SUDSI. Jaki jest podstawowy wzór tego, jakie są jego liczby i ile ich jest (i tym podobne)? (Nawiasem mówiąc, nie mogłem znaleźć SUDSI na OEIS .)