Die SUDSI-Sequenz ( su m, d ifference, s wap, i increment) ist eine merkwürdige Ganzzahlsequenz, die ein ziemlich chaotisches Verhalten zu zeigen scheint. Es kann wie folgt generiert werden:
Lassen S eine unendliche Liste der natürlichen Zahlen sein: 1 2 3 4 5 6 ...
. Lassen S i die eine indizierte bezeichnen i - te Element von S . Also ist S 1 anfangs 1, S 2 ist 2 usw. (es gibt kein S 0 ).
Beginnend mit S 1 und S 2 ...
- Berechnen Sie ihre Summe:
sum = S1 + S2
- Berechnen Sie ihre absolute Differenz (die größere minus die kleinere):
diff = |S1 - S2|
Vertausche die beiden Werte in S mit den Indizes von Summe und Differenz:
swap(Ssum, Sdiff)
Erhöhen Sie die Indizes von S, mit denen Sie arbeiten. Das nächste Mal werden Sie also die Summe und Differenz von S 2 und S 3 berechnen , und die Zeit danach wird S 3 und S 4 usw. sein.
- Wiederholen Sie diesen Vorgang auf unbestimmte Zeit.
Hier sind die ersten Stufen von S, wie dieser Prozess angewendet wird. Die Klammern []
umschließen die beiden Werte, die summiert und differenziert werden sollen.
Original S :
[1 2] 3 4 5 6 7 8 9 10 11 12 ...
Nachdem S 3 ( 3 = 1 + 2
) und S 1 ( 1 = |1 - 2|
) getauscht wurden:
3 [2 1] 4 5 6 7 8 9 10 11 12 ...
Nachdem S 3 und S 1 getauscht wurden:
1 2 [3 4] 5 6 7 8 9 10 11 12 ...
Nachdem S 7 und S 1 getauscht wurden:
7 2 3 [4 5] 6 1 8 9 10 11 12 ...
Nachdem S 9 und S 1 getauscht wurden:
9 2 3 4 [5 6] 1 8 7 10 11 12 ...
Nachdem S 11 und S 1 getauscht wurden:
11 2 3 4 5 [6 1] 8 7 10 9 12 ...
Nachdem S 7 und S 5 getauscht wurden:
11 2 3 4 1 6 [5 8] 7 10 9 12 ...
etc.
Die SUDSI-Sequenz ist definiert als die Sequenz der ersten Elemente in jeder dieser Listen. Die ersten Begriffe der SUDSI-Sequenz sind also 1 3 1 7 9 11 11
.
Hier sind die ersten 200 Terme der SUDSI-Sequenz (20 pro Zeile):
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
Es ist (zumindest für mich) unklar, wie man zukünftige Bedingungen vorhersagen könnte. Man kann nur mit Sicherheit sagen, dass die Ausdrücke immer ungerade und nicht abnehmend sind (nach dem zweiten Ausdruck) und dass einige Zahlen oft wiederholt werden.
Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die eine positive Ganzzahl n aufnimmt und den n- ten Term der SUDSI-Sequenz ausgibt oder zurückgibt . Wenn zum Beispiel n 1 ist, ist die Ausgabe 1
, wenn n 2 ist, ist die Ausgabe 3
, wenn n 200 ist, ist die Ausgabe 363
.
Nehmen Sie die Eingabe wie gewohnt vor (stdin / command line / function arg).
Die kürzeste Antwort in Bytes gewinnt.
(Diese Site codiert Dinge in UTF-8, aber Sie können jede beliebige vorhandene Codierung verwenden.)
Mathy-Bonus: (potenziell prämienberechtigt)
- Erzähl mir mehr über die SUDSI-Sequenz. Was ist das zugrunde liegende Muster für welche Zahlen und wie viele davon gibt es (und ähnliches)? (SUDSI konnte ich übrigens auf OEIS nicht finden .)