La séquence SUDSI ( su m, d ifference, s wap, i ncrement) est une suite d'entiers curieux qui semble présenter un comportement chaotique. Il peut être généré comme suit:
Que S soit une liste infinie des nombres naturels: 1 2 3 4 5 6 ...
. Soit S i désignent celui-indexé i ème élément de S . Donc au départ, S 1 est 1, S 2 est 2, etc. (il n'y a pas S 0 ).
À partir de S 1 et S 2 ...
- Calculez leur somme:
sum = S1 + S2
- Calculez leur différence absolue (la plus grande moins la plus petite):
diff = |S1 - S2|
Échangez les deux valeurs de S aux indices de la somme et de la différence:
swap(Ssum, Sdiff)
Augmentez les indices de S avec lesquels vous travaillez. Donc, la prochaine fois, vous calculerez la somme et la différence de S 2 et S 3 , et le temps après ce sera S 3 et S 4 , etc.
- Répétez ce processus indéfiniment.
Voici les premières étapes de S lorsque ce processus est appliqué. Les crochets []
entourent les deux valeurs qui sont sur le point d'être additionnées et différenciées.
S d' origine :
[1 2] 3 4 5 6 7 8 9 10 11 12 ...
Après l' échange de S 3 ( 3 = 1 + 2
) et S 1 ( 1 = |1 - 2|
):
3 [2 1] 4 5 6 7 8 9 10 11 12 ...
Après l' échange de S 3 et S 1 :
1 2 [3 4] 5 6 7 8 9 10 11 12 ...
Après l' échange de S 7 et S 1 :
7 2 3 [4 5] 6 1 8 9 10 11 12 ...
Après l' échange de S 9 et S 1 :
9 2 3 4 [5 6] 1 8 7 10 11 12 ...
Après l' échange de S 11 et S 1 :
11 2 3 4 5 [6 1] 8 7 10 9 12 ...
Après l' échange de S 7 et S 5 :
11 2 3 4 1 6 [5 8] 7 10 9 12 ...
etc.
La séquence SUDSI est définie comme la séquence des premiers éléments de chacune de ces listes. Les premiers termes de la séquence SUDSI sont donc 1 3 1 7 9 11 11
.
Voici les 200 premiers termes de la séquence SUDSI (20 par ligne):
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
On ne sait pas (du moins pour moi) comment on pourrait prédire les termes futurs. Il semble juste de dire que les termes sont toujours impairs, non décroissants (après le deuxième terme), et que certains nombres sont répétés beaucoup de fois.
Défi
Écrire un programme ou une fonction qui prend en un nombre entier positif n et imprime ou retourne le n ième terme de la suite SUDSI. Par exemple, si n est 1, la sortie est 1
, si n est 2, la sortie est 3
, si n est 200, la sortie est 363
.
Prenez l'entrée de n'importe quelle manière habituelle (stdin / ligne de commande / fonction arg).
La réponse la plus courte en octets l' emporte.
(Ce site code les choses en UTF-8, mais vous pouvez utiliser n'importe quel encodage existant que vous souhaitez.)
Bonus Mathy: (potentiellement éligible à la prime)
- Parlez-moi de la séquence SUDSI. Quel est le modèle sous-jacent à quels nombres en font partie et combien il y en a (et des trucs comme ça)? (Au fait, je n'ai pas trouvé SUDSI sur OEIS .)