Die naheliegende Lösung wäre, sie einfach als Zeichenfolge auszudrucken. Ist es jedoch möglich, einen kürzeren Code zu schreiben?
Bedarf:
- Es sollte keine Eingabe verarbeitet werden, und die Ausgabe sollte in Form von
2 3 5 7 11 13 ...
usw. erfolgen. - Es werden überhaupt keine reservierten Wörter in der Sprache verwendet
- Die Sprache sollte zumindest eine strukturierte Programmierung ermöglichen und reservierte Wörter enthalten (ansonsten wäre Punkt 2 umstritten).
Zuerst dachte ich ausschließlich an C / C ++, erweiterte aber die Frage, während ich immer noch versuchte, Betrug zu verhindern
Antworten:
C 60 Zeichen
Die Einschränkung "keine Keywords" spielt hier keine Rolle. Ich bin mir ziemlich sicher, dass es nach Möglichkeit nicht möglich ist, es durch Hinzufügen von Keywords zu verbessern.
Alternative Version:
Die Ausgabe ist nicht so schön, aber ich mag den
printf
Missbrauch.Bei beiden Lösungen besteht der Trick darin, zwei durch Rekursion implementierte Schleifen zu einer zusammenzuführen.
n
ist die nächste potentielle Primzahl,m
der nächste potentielle Divisor.In jedem rekursiven Aufruf erhöhen
n
(währendm
auf den vorherigen Wert gesetzt wird) oder verringern wir ihnm
.quelle
Python, 108 Zeichen
Python wurde nicht für diese Herausforderung gemacht. Willst du
print
? Das ist reserviert. Nun, wie wäre es mit wirstdout
? Nun, das wird einenimport
... Sie haben es erraten, zurückhaltend. Naja ... ich bin auf Unix, also kann ich den Dateideskriptor 1 öffnen, der zufällig stdout ist. Hacken!Mensch und Iteration? Nichts als
eval
. Natürlich keine Schleifen, aber wir können nicht einmal eine Funktion mitdef
oder definierenlambda
. Und um die Verletzung zusätzlich zu beleidigen, können wir nicht einmal das Listenverständnis verwenden! Ich suche immer nach einer Ausrede, um Dinge wie Codegolf zu benutzenmap(p.__mod__,...)
... das Verständnis ist immer besser. Bis jetzt ist das so.Jetzt könnten Sie sich beschweren, dass
exec
es sich um ein Keyword handelt, obwohl ich das Keyword nicht verwendet habe (ich habe nicht einmaleval
ein Keyword verwendetexec
). Nun, hier ist eine 117-Zeichen-Lösung, die nicht verwendet wird'exec'
.quelle
__import__
, aber das wird Zeichen kostenJavaScript (80 Zeichen)
Führen Sie in der Konsole Ihres Webbrowsers.
Benutzte ein Hauptsieb, das sich als sehr kondensiert herausstellte.
quelle
C 183 Zeichen
Hier ist ein kurzer erster Versuch. Ich glaube, das sollte den Anforderungen genügen. Ich benutze eine einfache Testdivision, um die Primzahlen und eine entrollte Schleife zu finden, die mit dem Präprozessor erstellt wurde, um sie zu durchlaufen, bis ich genug von ihnen gefunden habe. Die Anzahl der Wiederholungen wurde so angepasst, dass genau 128 Primzahlen gedruckt werden.
quelle
C 87 Zeichen
(Ich habe versucht, es in einem funktionaleren Stil zu schreiben, aber meine Unfähigkeit,
return
diesen Plan zu verwenden, hat mich umgebracht.)quelle
C 134 Zeichen
Hier ist eine alternative Lösung, die versucht, die Verwendung von Wörtern so weit wie möglich zu vermeiden, sei sie reserviert oder auf andere Weise:
Alles, was es verwendet, ist
printf
undmain
mit einem einzigen Argument.quelle
Mathematica 50 Zeichen
Ich bin mir nicht sicher, wie ich "reservierte Wörter" für Mathematica interpretieren soll, aber ich möchte spielen, also werde ich auf eingebaute Funktionen verzichten, um Primzahlen zu generieren oder auf Primalität zu testen.
quelle
Haskell, 72 Zeichen
Zugegeben, das Vermeiden von Keywords ist in Haskell nicht allzu schwierig.
quelle
K (ngn / k) , 31 Bytes
Probieren Sie es online!
quelle