Lesen Sie dies, wenn Sie verwirrt sind.
Herausforderung:
Das Ziel dieses Code-Golfs basiert auf der Zahl 8675309
...
Ihr Ziel ist es, jede Primzahl von 2 bis 8675309 auszudrucken, beginnend mit der Nummer 2 und dann 8 Primzahlen überspringen, dann 6 überspringen, dann 7 überspringen usw. Überspringen Sie im Wesentlichen eine Anzahl von Primzahlen, die durch die nächste Zahl in bestimmt werden die Reihenfolge 8675309
. Fahren Sie auf 8 um, sobald es 9 erreicht hat.
Ausgabe:
2
29
(8 übersprungen, um zur 10. Primzahl zu gelangen)
59
(6 übersprungen, um zur 17. Primzahl zu gelangen)
97
(7 übersprungen, um zur 25. Primzahl zu gelangen)
Beispiel: (PHP-ähnlicher Pseudocode, wobei $prime
ein Array alle Primzahlen enthält.)
$tn=1;
$c=1;
$na=array(8,6,7,5,3,0,9);
l:
output($prime[$tn]);
if ($prime[$tn]>=8675309) {exit(8675309)};
$c+=1;
if ($c>=8) {$c=1};
$tn+=$na[$c];
goto l;
Wenn ich 8 Primzahlen überspringe , meine ich, von der Primzahl Nr. 1 zur Primzahl Nr. 10 zu gehen (die 8 dazwischen überspringen).
Jede Nummer muss in einer neuen Zeile stehen.
Wenn Sie das erreichen 0
in 8675309
, drucken Sie einfach nur die nächste Primzahl ohne Skipping.
Dies ist Code-Golf, also gewinnt der kürzeste Code (in Bytes).
quelle
$c
zu früh an, und wenn wir 8675309 nicht genau treffen (oder?), Gibt er auch die erste Zahl aus, die diesen Wert überschreitet.Antworten:
Mathematica 67 Bytes
Trifft 8675309 jedoch nicht - ich bin mir nicht sicher, ob OP dies beabsichtigt.
quelle
Wunder , 47 Bytes
Oh meine Güte, das wird mit der Zeit immer langsamer ...
Erläuterung
Nimmt 582161 (Anzahl der Primzahlen <= 8675309) Elemente aus der Liste der unendlichen Primzahlen
P
und ergibt das Ergebnis neuP
.Zyklisiert die Ziffern von 8675309 unendlich und führt eine Aufnahme für die resultierende Liste durch.
Geben Sie das erste Element in ein
P
,cycle item + 1
löschen Sie Elemente aus P und deklarieren Sie das Ergebnis als neuP
. Diese OperationP
wirkt auch als Wahrheitswert für die Aufnahme; Wenn die Liste leer / falsch ist (was bedeutet, dass wir 8675309 erreicht haben), beenden wir die Aufnahme aus der zyklischen Liste.Schnellere Implementierung (zum Testen)
Immer noch sehr langsam, aber spürbar schneller.
quelle
Gelee ,
23 2924 Bytes+6 Bytes für einen temporären Patch, um die Anforderung zum Drucken von 8675309 zu erfüllen.
-5 Bytes, die zu einem golfigeren, aber langsameren Ansatz wechseln, um dies zu beheben.
Jetzt zu langsam, um auf TryItOnline ausgeführt zu werden, aber es wird lokal in ein paar Minuten ausgeführt, wobei die unten gezeigten Zahlen mit dazwischen liegenden Zeilenvorschüben erzeugt werden (Anzahl der übersprungenen Primzahlen wird unten in Klammern angezeigt):
* Der letzte ist nur ein effektiver Sprung von 4, da er einfach an die Liste angehängt wird.
Klicken Sie hier, um eine Version mit 3659 anstelle von 8675309 zu erhalten, die 19 Sätze mit vier Sprüngen (anstelle von 12937 Sätzen mit 7) enthält und 3659 anhängt (was ein effektiver Sprung von 6 ist).
Wie?
quelle
Ruby, 121 Bytes
Nachlaufender Zeilenumbruch am Ende der Datei unnötig und nicht bewertet.
Erläuterung:
P
ist ein Array von Primzahlen.c
ist ein Kandidat Prime;s
ist das Produkt der Reste modulo jeder kleineren Primzahl; Wenn ein solcher Rest Null ist (was anzeigt, dass er zusammengesetztc
ist),s
wird (und bleibt) Null.Der Primzahlengenerator ist langsam. Das Laufen dauert ziemlich lange. Das Testen wurde durchgeführt, indem ein
P
Array ersetzt wurde, das mit effizienteren Mitteln erzeugt wurde (insbesondere Kurzschluss bei gleichmäßiger Teilung, und es hilft auch sehr , das Testen an der Quadratwurzel zu stoppen).quelle
Haskell, 122 Bytes
Dies könnte das sein, wonach gefragt wird:
Ich konnte ein paar Bytes speichern , indem precomputing wie viel Anzahl benötigt werden , und ersetzt
takeWhile
mittake
. Dies würde es auch ermöglichen, sich an jede Entscheidung über die zuletzt auszugebende Nummer anzupassen. In meinem Test wurden bereits Zahlen bis zu 600000 mit sehr wenig Speicher gedruckt, sodass ich denke, dass dies den ganzen Weg gehen kann.quelle
8675310
mit8675
, sagen wir. Und es funktioniert für mich (kompiliert, mit Optimierung, nicht ohne versucht) in der ursprünglichen Form. Eine schnellere Maschine, die später als der erste Test gestartet wurde, hat bereits 1.600.000 erreicht.Haskell, 109 Bytes
Probieren Sie es online aus! (abgeschnitten
8675309
auf8675
, andernfalls tritt bei Online-Test eine Zeitüberschreitung auf )Verwendungszweck:
quelle
Perl 6 ,
65 7367 Bytes(8675137 konnte nicht gedruckt werden, weil es fehlte:partial
)Durch Verschieben des Bereichsendes
:partial
kann der entfernt werden.Versuchen Sie es (5 Sekunden Grenze hinzugefügt) Sehen Sie es beenden
Das erste Beispiel wurde auf 52 Minuten und 41,464 Sekunden festgelegt.
Erweitert:
Das Ergebnis des
rotor
Aufrufs ist die folgende Sequenzquelle
:partial
Adverb auf dem Anruf zu.rotor
Befunge, 136 Bytes
Probieren Sie es online aus! , aber sei dir bewusst, dass es eine Zeitüberschreitung geben wird, lange bevor es das Ende erreicht. Eine kompilierte Version auf meinem lokalen Computer ist jedoch in weniger als 10 Sekunden fertig.
Erläuterung
Um die Primalität zu testen, iterieren wir über den Bereich von 2 bis sqrt ( n ) und prüfen, ob n ein Vielfaches eines dieser Werte ist - wenn nicht, ist es eine Primzahl. Dieser Prozess wird durch die Tatsache erschwert, dass der iterierte Wert in einer temporären "Variablen" gespeichert werden muss. Da Befunges Speicherzellen in ihrer Größe begrenzt sind, muss dieser Speicher auf zwei Zellen aufgeteilt werden. Um die übersprungenen Primzahlen zu verarbeiten, verwenden wir eine Nachschlagetabelle (die Sie in Zeile 5 sehen können), um die verschiedenen Bereiche zu verfolgen, die übersprungen werden müssen.
Ich werde keine detaillierte Analyse des Codes durchführen, da es ziemlich viel Interleaving-Code mit Befehlen gibt, die über verschiedene Codepfade verteilt sind, um Platz zu sparen. Dies macht es ziemlich schwierig, den Dingen zu folgen, und ich denke nicht, dass es für jemanden besonders interessant wäre, der Befunge noch nicht kennt.
Beispielausgabe
quelle
Bash (+ Coreutils),
9894 BytesEDITS:
Golf gespielt
Prüfung
Probieren Sie es online aus! (begrenzt auf N <1000, damit es schnell läuft)
Die Vollversion dauert auf meinem Computer ca. 15 Sekunden.
quelle