La secuencia SUDSI ( su m, d ifference, s wap, i ncrement) es una secuencia entera curiosa que parece exhibir un comportamiento bastante caótico. Se puede generar de la siguiente manera:
Deje que S sea una lista infinita de los números naturales: 1 2 3 4 5 6 ...
. Let S i denota el uno indexados i -ésimo elemento de S . Inicialmente, S 1 es 1, S 2 es 2, etc. (no hay S 0 ).
Comenzando con S 1 y S 2 ...
- Calcule su suma:
sum = S1 + S2
- Calcule su diferencia absoluta (la más grande menos la más pequeña):
diff = |S1 - S2|
Cambie los dos valores en S en los índices de la suma y la diferencia:
swap(Ssum, Sdiff)
Incremente los índices de S con los que está trabajando. Entonces, la próxima vez calculará la suma y la diferencia de S 2 y S 3 , y el tiempo posterior será S 3 y S 4 , etc.
- Repita este proceso indefinidamente.
Aquí están las primeras etapas de S a medida que se aplica este proceso. Los corchetes []
rodean los dos valores que están a punto de sumarse y diferenciarse.
S original :
[1 2] 3 4 5 6 7 8 9 10 11 12 ...
Después de intercambiar S 3 ( 3 = 1 + 2
) y S 1 ( 1 = |1 - 2|
):
3 [2 1] 4 5 6 7 8 9 10 11 12 ...
Después de intercambiar S 3 y S 1 :
1 2 [3 4] 5 6 7 8 9 10 11 12 ...
Después de intercambiar S 7 y S 1 :
7 2 3 [4 5] 6 1 8 9 10 11 12 ...
Después de intercambiar S 9 y S 1 :
9 2 3 4 [5 6] 1 8 7 10 11 12 ...
Después de intercambiar S 11 y S 1 :
11 2 3 4 5 [6 1] 8 7 10 9 12 ...
Después de intercambiar S 7 y S 5 :
11 2 3 4 1 6 [5 8] 7 10 9 12 ...
etc.
La secuencia SUDSI se define como la secuencia de los primeros elementos en cada una de estas listas. Entonces, los primeros términos de la secuencia SUDSI son 1 3 1 7 9 11 11
.
Aquí están los primeros 200 términos de la secuencia SUDSI (20 por línea):
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
No está claro (al menos para mí) cómo uno podría predecir términos futuros. Solo se siente seguro decir que los términos son siempre impares, no decrecientes (después del segundo término), y que algunos números se repiten muchas veces.
Desafío
Escribir un programa o función que toma en un número entero positivo n y grabados o devuelve el n º término de la secuencia de SUDSI. Por ejemplo, si n es 1, la salida es 1
, si n es 2, la salida es 3
, si n es 200, la salida es 363
.
Tome la entrada de la forma habitual (stdin / línea de comando / función arg).
La respuesta más corta en bytes gana.
(Ese sitio codifica cosas en UTF-8, pero puede usar cualquier codificación existente que desee).
Bono Mathy: (potencialmente elegible para recompensa)
- Cuéntame más sobre la secuencia SUDSI. ¿Cuál es el patrón subyacente de qué números son parte de él y cuántos hay (y cosas así)? (Por cierto, no pude encontrar SUDSI en OEIS ).