La sequenza SUDSI ( su m, d ifference, s wap, i ncrement) è una curiosa sequenza di numeri interi che sembra esibire un comportamento piuttosto caotico. Può essere generato come segue:
Lasciate che S sia una lista infinita dei numeri naturali: 1 2 3 4 5 6 .... Let S i denotare la sola indicizzato i -esimo elemento di S . Quindi inizialmente S 1 è 1, S 2 è 2, ecc. (Non c'è S 0 ).
A partire da S 1 e S 2 ...
- Calcola la loro somma:
sum = S1 + S2 - Calcola la loro differenza assoluta (la più grande meno la più piccola):
diff = |S1 - S2| Scambia i due valori in S sugli indici della somma e della differenza:
swap(Ssum, Sdiff)Incrementa gli indici di S con cui stai lavorando. Quindi la prossima volta calcolerai la somma e la differenza di S 2 e S 3 , e il tempo successivo sarà S 3 e S 4 , ecc.
- Ripeti questo processo indefinitamente.
Ecco le prime fasi di S mentre viene applicato questo processo. Le parentesi []racchiudono i due valori che stanno per essere sommati e differenziati.
S originale :
[1 2] 3 4 5 6 7 8 9 10 11 12 ...
Dopo aver scambiato S 3 ( 3 = 1 + 2) e S 1 ( 1 = |1 - 2|):
3 [2 1] 4 5 6 7 8 9 10 11 12 ...
Dopo aver scambiato S 3 e S 1 :
1 2 [3 4] 5 6 7 8 9 10 11 12 ...
Dopo aver scambiato S 7 e S 1 :
7 2 3 [4 5] 6 1 8 9 10 11 12 ...
Dopo aver scambiato S 9 e S 1 :
9 2 3 4 [5 6] 1 8 7 10 11 12 ...
Dopo aver scambiato S 11 e S 1 :
11 2 3 4 5 [6 1] 8 7 10 9 12 ...
Dopo aver scambiato S 7 e S 5 :
11 2 3 4 1 6 [5 8] 7 10 9 12 ...
eccetera.
La sequenza SUDSI è definita come la sequenza dei primi elementi in ciascuno di questi elenchi. Quindi i primi termini della sequenza SUDSI sono 1 3 1 7 9 11 11.
Ecco i primi 200 termini della sequenza SUDSI (20 per riga):
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
Non è chiaro (almeno per me) come si possano prevedere i termini futuri. È sicuro affermare che i termini sono sempre dispari, non decrescenti (dopo il secondo termine) e che alcuni numeri vengono ripetuti molte volte.
Sfida
Scrivere un programma o una funzione che prende in un numero intero positivo n e stampe o restituisce il n esimo termine della sequenza SUDSI. Ad esempio, se n è 1, l'uscita è 1, se n è 2, l'uscita è 3, se n è 200, l'uscita è 363.
Prendi l'input in qualsiasi modo normale (stdin / riga di comando / funzione arg). Vince la
risposta più breve in byte .
(Quel sito codifica le cose in UTF-8, ma è possibile utilizzare qualsiasi codifica dannatamente esistente che si desidera.)
Bonus Mathy: (potenzialmente idoneo per la taglia)
- Dimmi di più sulla sequenza SUDSI. Qual è lo schema sottostante a quali numeri ne fanno parte e quanti di essi ci sono (e cose del genere)? (Non ho trovato SUDSI su OEIS a proposito.)
