Die Schrotflinten-Nummern sind eine Sequenz mit einer ziemlich einfachen Definition, aber einer interessanten Struktur. Beginnen Sie mit den natürlichen Zahlen:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...
Nehmen Sie nun alle Zahlen bei durch 2 teilbaren Indizes , gruppieren Sie sie in Paare und tauschen Sie die Zahlen in jedem Paar aus:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ...
^ ^ ^ ^ ^ ^ ^
<---> <---> <-----> <----
1, 4, 3, 2, 5, 8, 7, 6, 9, 12, 11, 10, 13, 16, ...
Machen Sie jetzt dasselbe mit Indizes, die durch 3 teilbar sind :
1, 4, 3, 2, 5, 8, 7, 6, 9, 12, 11, 10, 13, 16, ...
^ ^ ^ ^
<------> <--------->
1, 4, 8, 2, 5, 3, 7, 6, 10, 12, 11, 9, 13, 16, ...
Und dann für 4 , 5 , 6 und so weiter:
1, 4, 8, 2, 5, 3, 7, 6, 10, 12, 11, 9, 13, 16, ...
1, 4, 8, 6, 5, 3, 7, 2, 10, 12, 11, 14, 13, 16, ...
1, 4, 8, 6, 12, 3, 7, 2, 10, 5, 11, 14, 13, 16, ...
1, 4, 8, 6, 12, 14, 7, 2, 10, 5, 11, 3, 13, 16, ...
...
Nach k solchen Schritten werden die ersten k + 1 Zahlen festgelegt. Wir können also die unendliche Folge von Schrotflinten-Zahlen als die Grenze definieren, bis zu der k gegen unendlich gehen darf . Die ersten 66 Zahlen sind:
1, 4, 8, 6, 12, 14, 16, 9, 18, 20, 24, 26, 28, 22, 39, 15, 36, 35, 40, 38, 57, 34, 48, 49, 51, 44,
46, 33, 60, 77, 64, 32, 75, 56, 81, 68, 76, 58, 100, 55, 84, 111, 88, 62, 125, 70, 96, 91, 98, 95,
134, 72, 108, 82, 141, 80, 140, 92, 120, 156, 124, 94, 121, 52, 152, 145, ...
Unterhaltsame Tatsache: Obwohl diese Sequenz nur durch Permutieren der natürlichen Zahlen erhalten wird, enthält sie keine Primzahlen.
Die Herausforderung
Ermitteln Sie bei einer Ganzzahl n > 0
die n
Nummer der Schrotflinte. Sie können ein Programm oder eine Funktion schreiben, Eingaben über STDIN (oder die nächstgelegene Alternative), ein Befehlszeilenargument oder ein Funktionsargument vornehmen und die Ausgabe zurückgeben oder an STDOUT (oder die nächstgelegene Alternative) ausgeben.
Dies ist Codegolf, daher gewinnt die kürzeste Übermittlung (in Bytes).
Bestenlisten
Das gibt mehr Antworten, als ich dachte, und es treten mehrere Personen in derselben Sprache gegeneinander an. Hier ist also ein Stack-Snippet, um sowohl eine reguläre Rangliste als auch eine Übersicht der Gewinner nach Sprache zu generieren.
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
# Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
# Ruby, <s>104</s> <s>101</s> 96 bytes
10
, 21
, 25
und 30
erscheint auch nicht, zum Beispiel.
k
dritten Iteration das k
dritte Element im Array in die 2k
dritte Position transponiert und erst bei der 2k
dritten Iteration wieder berührt , wenn es in die 4k
dritte Position unendlich transponiert wird . Ein Prim wird erst transponiert, wenn er sozusagen an der Reihe ist, und alle Primzahlen werden vorwärts gemischt. Aber wir können leicht eine Liste der unschuldigen Opfer erstellen, indem wir einfach das erste Element ausdrucken, das bei Iteration 2 und jeder ungeraden Iteration transponiert werden soll. Die Liste lautet: 2, 3, 5, 7, 10, 11, 13, 21, 17, 19, 30, 23, 27, 25, 29, 31, 45, 42, 37, 54, 41, 43, 65, ...