A sequência SUDSI ( su m, d ifference, s WAP, i ncrement) é uma sequência de número inteiro curioso que parece exibir comportamento caótico. Pode ser gerado da seguinte maneira:
Deixe- S ser uma lista infinita dos números naturais: 1 2 3 4 5 6 ...
. Deixe S i denotar a uma indexados i -ésimo elemento de S . Então, inicialmente, S 1 é 1, S 2 é 2, etc. (não há S 0 ).
Começando com S 1 e S 2 ...
- Calcule a soma deles:
sum = S1 + S2
- Calcule a diferença absoluta (quanto maior menos o menor):
diff = |S1 - S2|
Troque os dois valores em S nos índices da soma e da diferença:
swap(Ssum, Sdiff)
Incremente os índices de S com os quais você está trabalhando. Então, da próxima vez, você calculará a soma e a diferença de S 2 e S 3 , e o tempo depois disso será S 3 e S 4 , etc.
- Repita esse processo indefinidamente.
Aqui estão os primeiros estágios de S à medida que esse processo é aplicado. Os colchetes []
envolvem os dois valores que estão prestes a ser somados e diferenciados.
S original :
[1 2] 3 4 5 6 7 8 9 10 11 12 ...
Depois que S 3 ( 3 = 1 + 2
) e S 1 ( 1 = |1 - 2|
) são trocados:
3 [2 1] 4 5 6 7 8 9 10 11 12 ...
Depois que S 3 e S 1 são trocados:
1 2 [3 4] 5 6 7 8 9 10 11 12 ...
Depois que S 7 e S 1 são trocados:
7 2 3 [4 5] 6 1 8 9 10 11 12 ...
Depois que S 9 e S 1 são trocados:
9 2 3 4 [5 6] 1 8 7 10 11 12 ...
Depois que S 11 e S 1 são trocados:
11 2 3 4 5 [6 1] 8 7 10 9 12 ...
Depois que S 7 e S 5 são trocados:
11 2 3 4 1 6 [5 8] 7 10 9 12 ...
etc.
A sequência SUDSI é definida como a sequência dos primeiros elementos em cada uma dessas listas. Portanto, os primeiros termos da sequência SUDSI são 1 3 1 7 9 11 11
.
Aqui estão os primeiros 200 termos da sequência SUDSI (20 por linha):
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
Não está claro (pelo menos para mim) como se pode prever termos futuros. Parece seguro dizer que os termos são sempre ímpares, não diminuem (após o segundo mandato) e que alguns números são repetidos várias vezes.
Desafio
Escrever um programa ou função que leva em um número inteiro positivo n e gravuras ou retorna o n ésimo termo da sequência SUDSI. Por exemplo, se n for 1, a saída será 1
, se n for 2, a saída será 3
, se n for 200, a saída será 363
.
Tome entrada da maneira usual (stdin / linha de comando / função arg).
A resposta mais curta em bytes vence.
(Esse site codifica as coisas em UTF-8, mas você pode usar qualquer codificação existente que desejar.)
Bônus de Mathy: (potencialmente elegível para recompensa)
- Conte-me mais sobre a sequência SUDSI. Qual é o padrão subjacente a quais números fazem parte dele e quantos deles existem (e coisas assim)? (A propósito, não consegui encontrar o SUDSI no OEIS .)