Schreiben Sie ein Programm, das die Primalität einer bestimmten Zahl testet und die Ausgabe als Booleschen Wert ausgibt (True ist Primzahl). Ihr Primetest kann (muss aber nicht) für die Nummer 1 gültig sein.
Hier ist der Haken: Ihr Programm selbst muss eine Primzahl ergeben. Konvertieren Sie jedes Zeichen (einschließlich Leerzeichen) in seinen Unicode / ASCII-Wert ( Tabelle ). Addieren Sie dann alle diese Zahlen, um die Summe Ihres Programms zu erhalten.
Nehmen Sie zum Beispiel dieses nicht so großartige Programm, das ich in Python 3.3 geschrieben habe:
q=None
y=int(input())
for x in range(2,int(y**0.5)+1):
if y%x==0:
q=False
if not q:
q=True
print(q)
Wenn Sie alle Zeichen in den entsprechenden Unicode / ASCII-Wert konvertieren, erhalten Sie:
113 61 78 111 110 101 10 121 61 105 110 116 40 105 110 112 117 116 40 41 41 10 102 111 114 32 120 32 105 110 32 114 97 110 103 101 40 50 44 105 110 116 40 121 42 42 48 46 53 41 43 49 41 58 10 32 32 32 32 105 102 32 121 37 120 61 61 48 58 10 32 32 32 32 32 32 32 32 113 61 70 97 108 115 101 10 105 102 32 110 111 116 32 113 58 10 32 32 32 32 113 61 84 114 117 101 10 112 114 105 110 116 40 113 41
Sie können die Summe dieser Zahlen dann manuell oder mit Ihrem eigenen Programm ermitteln. Dieses spezifische Programm ergibt 8293, was eine Primzahl ist.
Das ist natürlich Code Golf. Je kleiner Sie also Ihr Programm gestalten können, desto besser. Wie von anderen Usern herausgestellt, ist dieses Programm nicht sehr golfen.
Ein paar Regeln:
Gültige Eingaben sind STDIN und Eingabeaufforderungen (keine Funktionen, es ist nur eine Möglichkeit, kostenlosen zusätzlichen Code hinzuzufügen). Leerzeichen sind zulässig, jedoch nur, wenn sie für die Funktionalität Ihres Programms von entscheidender Bedeutung sind. Die Ausgabe muss eine Ausgabe sein, nicht nur in einer Variablen gespeichert oder zurückgegeben (verwenden Sie print, STDOUT usw.).
Flags können verwendet werden und sollten buchstäblich gezählt und nicht erweitert werden. Kommentare sind nicht erlaubt. Nicht-ASCII-Zeichen sollten dem Wert in ihrer jeweiligen Codierung zugewiesen werden.
Stellen Sie sicher, dass Sie die Größe Ihres Programms und die Summe des Programms angeben. Ich werde testen, um sicherzustellen, dass Programme gültig sind.
Viel Glück!
Hier ist ein Ausschnitt, um die Summe Ihres Programms zu zählen und zu prüfen, ob es ein Primer ist:
quelle
Antworten:
Hallo Welt! 13 Bytes
1193
quelle
Ruby, Summe 3373, 37 Bytes
quelle
Mikroskript II, 2 Bytes (Summe 137)
Mikroskript II, 4 Bytes (Summe 353)
Eigentlich bin ich ziemlich überrascht, dass beide mit Prime-Byte-Summen aufgewickelt wurden.
quelle
Japt , 2 Bytes,
191
U
:85
j
:106
Probieren Sie es online!
quelle
Pyth, 2 Bytes,
127
Probieren Sie es online aus
Ausgänge
1
für Primzahlen,0
für Nicht-Primzahlen./
hat Code Punkt47
.P
hat Code Punkt80
.Wie es funktioniert:
quelle
Haskell, 52 Bytes, 4421
Wilson-Satz.
quelle
::IO Int
sollte eigentlich nicht nötig sein, es sei denn, das ist der kürzeste Weg, um eine Primzahlsumme zu erhalten.Python 2, 50 Bytes,
4201
Funktioniert für 1. Die Ausgabe ist positiv, wenn prim oder null, wenn nicht.
Probieren Sie es online aus
Python 2, 44 Bytes,
3701
Funktioniert nicht für 1. Gibt einen Booleschen Wert aus.
Probieren Sie es online aus
quelle
JavaScript (ES6), 47 Byte,
3541
Dies basiert stark auf der Primärtestfunktion von ETHproductions , die hier zu finden ist .
quelle
05AB1E , 2 Bytes,
173
Erläuterung:
Probieren Sie es online!
quelle
PHP, 38 Bytes, Summe 2791
Unterhaltsame Tatsache: Mit
$h
anstelle von$c
wäre die Summe2801
(auch eine Primzahl), und ihre101011110001
als Dezimalzahl gelesene Binärdarstellung ist auch eine Primzahl.Nimmt Kommandozeilenargumente, druckt
1
oder leere Zeichenkette. Laufen Sie mit-r
.Code aus meiner eigenen primären Funktion genommen (schauen Sie sich den ursprünglichen Beitrag an, wenn Sie können).
quelle
R 27
32Bytes, Summe 224326095 Bytes dank @rturnbull gespeichert
Dies nutzt die isprime-Funktion der gmp-Bibliothek.
quelle
cat(!!gmp::isprime(scan()))
ist 5 Bytes kürzer und summiert sich2243
auch prime.Python 2, 44 Bytes, Bytesumme 3109
Dies ist die 44-Byte-Implementierung von xnor mit den niedrigstwertigen Variablennamen, die eine Prim-Byte-Summe ergeben.
Druckt
1
wenn Prime und0
wenn nicht.quelle
Jelly 6 Bytes , Bytesumme 691
druckt
1
ob prime und0
wenn nicht.TryItOnline!
Die Bytes in hexadezimaler Schreibweise sind
93 0D D5 2C CD 45
(siehe Codepage ) oder in dezimaler Schreibweise147 13 213 44 205 69
die Summe zu 691, was eine Primzahl ist.Wie?
Das
Æḍ
Funktionalität ist so, dass Primzahlen und ihre Negationen eine Zahl zurückgeben, während andere Ganzzahlen keine zurückgeben (zusammengesetzte Zahlen und ihre Negationen geben Zahlen zurück, die größer als eins, eins und minus eins sind, und null gibt, seltsamerweise minus eins zurück).Die
Ṡ
Funktionalität ist so, dass negative Ganzzahlen minus eins zurückgeben, null null zurückgibt und positive Ganzzahlen eins zurückgeben.Somit geben die beiden Funktionen nur den gleichen Wert für die Primzahlen zurück.
Beachten Sie, dass das 3-Byte-Programm,
ƓÆP
das direkt testet, ob die Eingabe von STDIN eine Primzahl ist, leider kein Primsummenprogramm ist (240).Das Testen auf Gleichheit mit
=
(equals),e
(exists in) oder⁼
(non-vectorising equals) für 5 Bytes liefert ebenfalls keine Primsummenprogramme.Alternative (möglicherweise nicht akzeptabel) 4 Byte, Summe 571
Wenn die E / A-Einschränkungen weiterhin vollständige Programme zulassen, die ein Argument annehmen.
... nach dem gleichen Prinzip wie oben, wobei
⁼
Gleichheit ohne Vektorisierung vorliegt (der Aspekt ohne Vektorisierung hat keine Auswirkung, da ohnehin nichts zu vektorisieren ist). Die Hex - Werte sind ,0D D5 8C CD
die sind13 213 140 205
in dezimal die Summe auf 571, eine Primzahl.Beachten Sie erneut, dass das 2-Byte-Programm
ÆP
keine Primsumme hat (93).quelle
ƓÆPG
(311) undÆPF
(163) sollten in Ordnung sein, denke ich?ƓÆḍ,ṠE
der Wert16183
, der zufällig Primzahl ist!ƓÆPG
OK macht. Ich habe auch gefragt, ob ein Programm, das eher Eingaben als die Verwendung von STDIN vornimmt, akzeptabel ist.ÆP¥
ist 3 Bytes und 97.CJam , 4 Bytes, Bytesumme 439
Verwendet den eingebauten Primalitätstest.
Probieren Sie es online!
Alternative Lösung, 4 Byte, Summe 461
quelle
Mathematica, 21 Bytes,
1997
Input[]
Liest eine Eingabezeile (von STDIN, wenn kein Front-End verwendet wird, durch ein Dialogfeld, wenn das Mathematica-Front-End verwendet wird),Print@*PrimeQ
ist die Zusammensetzung (@*
) derPrint
undPrimeQ
-Funktionen und@
ist die Präfixfunktionsnotation.quelle
Perl 6 ,
2422 Bytes,1949
Alle drei Leerzeichen sind erforderlich.
(Perl 6 ist es egal, welche Art von Whitespace-Zeichen sie sind, also habe ich eine neue Zeile gewählt, anstatt den üblicherweise verwendeten Platz für die zweite ...)
quelle
Pyth, 4 Bytes,
367
Probieren Sie es hier aus!
quelle
Pip , 8 Bytes,
511
Ich habe einen Prime Checker geschrieben und die Summe war prime. Praktisch. Überprüfen Sie die Eingaben 1-30: Probieren Sie es online aus!
Erläuterung
quelle
Pari / GP , 23 Bytes,
2111
Probieren Sie es online!
quelle
J, 18 Bytes,
1103
Nicht weit vom Optimum entfernt, konnte ich einen vollständigen Programm-Primärtest mit mindestens 17 Bytes durchführen
echo(p:[:".1!:1)1
, was leider 1133 = 11 * 103 ergibt.Leider kann ich nicht herausfinden, wie Tastatureingaben auf TIO funktionieren, also noch kein Link.
Erläuterung:
Programm validieren:
quelle
C (gcc) ,
6260 Bytes, 4583Ziemlich einfach. Gibt * aus, wenn prime, andernfalls wird ein Leerzeichen ausgegeben. Funktioniert nicht für 1.
-2 dank l4m2
Probieren Sie es online!
quelle
n;main(i){for(scanf("%d",&n);++i<n;)n=n%i?n:0;puts("*"+!n);}
Möglicherweise müssen Sie einen Variablennamen für die Primzahl ändernAWK , 36 Bytes, Bytesumme 2239
Probieren Sie es online!
Ausgänge
0
wenn nicht prime und1
for prime. Auf jeden Fall nicht der effizienteste Code, da er jede ganze Zahl überprüft, die größer ist als1
die Teilung der Eingabe.quelle
Excel (57 Byte, Codesumme 3547)
Excel hat eigentlich keine "Eingabe", aber diese Formel geht davon aus, dass die zu testende Zahl in A1 vorliegt, und gibt sie in jede Zelle aus, in die Sie sie einfügen. Dies ist eine Array-Formel. Drücken Sie daher zum Eingeben Strg-Umschalt-Eingabe es, anstatt einzutreten.
quelle
Java 8, 114 Bytes, Prime 10037
Probieren Sie es online aus.
Erläuterung:
Ich habe verwendet,
x
anstatti
die Unicode-Summe zu einer Primzahl zu machen. Überprüfen Sie hier die Unicode-Summe.quelle
Gelee , 4 Bytes, Σ = 239
Probieren Sie es online!
Beweis: Online ausprobieren! (Nehmen Sie die 1-basierten Indizes der Zeichen des Programms von Jellys Codepage, dekrementieren Sie, um sie auf 0 zu setzen, summieren Sie und überprüfen Sie dann, ob das Ergebnis prim ist).
quelle
SmileBASIC, 42 Bytes,
2687
Gibt 1 (wahr) aus, wenn die Zahl eine Primzahl ist, andernfalls 0 (falsch).
Die Variablennamen wurden nicht nur ausgewählt, um das Programm zu optimieren.
N
ist die n umber zu testen,D
ist das d iVISOR undP
verfolgt, ob N p Raureif.quelle
Wunder , 7 Bytes,
537
Es gibt wahrscheinlich einen besseren Weg ...
quelle
Rust, 190 Bytes, 15013 Punkte
Ungolfed
Funktioniert nicht für 1
quelle
Stax , 349
Führen Sie es aus und debuggen Sie es
quelle
|pQ
Funktioniert für eine Punktzahl von 317. Wenn das Vertauschen von Wahrhaftigkeit / Falschheit zulässig ist,|p!
funktioniert dies auch für 269.Flüstert v2 , 33 Bytes
Probieren Sie es online!
44381
Wie es funktioniert
Dies wird in der Reihenfolge angezeigt, in der es ausgeführt wird:
quelle