Ihre Herausforderung besteht darin, eine Funktion mit Code-Golf zu akzeptieren, die true oder false (oder eine ähnliche aussagekräftige Darstellung von yes und no) zurückgibt, wenn eine Zahl die folgenden Kriterien erfüllt:
- Die ganze Zahl selbst ist eine Primzahl ODER
- Jede seiner Nachbar-Ganzzahlen ist eine Primzahl
Zum Beispiel:
Eine Eingabe von 7
würde True zurückgeben.
Eine Eingabe von 8
würde auch True zurückgeben.
Eine Eingabe von 15
würde False zurückgeben. (Weder 14, 15 noch 16 sind Primzahlen)
Die Eingabe muss für Zahlen zwischen 2 ^ 0 und 2 ^ 20 korrekt zurückgegeben werden können, damit Sie sich keine Gedanken über Vorzeichenprobleme oder Ganzzahlüberläufe machen müssen.
code-golf
number
primes
decision-problem
Herr Lama
quelle
quelle
Antworten:
J, 17
Gibt Boolesche Werte zurück, die als Prozessrückgabecodes codiert sind: null für wahr, ungleich null für falsch. Beispielgebrauch:
quelle
*/0 p:<:,],>:
ist kürzer und eine richtige (Lambda) -Funktion ist([:*/0 p:<:,],>:)
Haskell, 47 Zeichen
quelle
Python
8580Zum ersten Mal bei Code Golf, daher fehlen mir wahrscheinlich einige Tricks.
quelle
[]
. Alle werden mehr als glücklich sein, mit einem Generatorausdruck zu arbeiten. Wenn es Ihnen nichts ausmacht, dass Ihr Code hässlich ist, können Sie auch die Leerzeichen zwischen0
undfor
, und)
und entfernenor
.f=lambda n:any(all(m%i for i in range(2,m))for m in[n,n-1,n+1])
Kein wirklicher Konkurrent in Sachen Code-Kürze, aber dennoch unterwerfend, da die Bestimmung der Primzahl durch regulären Ausdruck in vielerlei Hinsicht verdreht ist!
Python (2.x), 85 Zeichen
quelle
Ruby (55 oder 50 als Lambda)
oder als lambda (benutze
g[23]
es um es zu nennen)Kaffeeskript (53)
quelle
Die langweilige Mathematica, 35- Lösung!
quelle
Or@@PrimeQ/@{n-1,n,n+1}
.Or@@PrimeQ@{#-1,#,#+1}&
(der Schrägstrich in seinem Code ist nicht erforderlich)C
1128272 ZeichenNach dem Kommentar von Ilmari Karonen, der durch das Entfernen 30 Zeichen gespart hat
main
, wird nunP
true / false zurückgegeben. Außerdem wurde die Schleife durch Rekursion und einige weitere Verbesserungen ersetzt.Originalfassung:
quelle
main(n,m)int**m;
.Mathematica, 24 Bytes
Ich weiß nicht, warum dieser alte Beitrag heute in meiner Liste auftauchte, aber ich erkannte, dass Mathematica hier wettbewerbsfähig ist.
Unbenannte Funktion, die ein ganzzahliges Argument verwendet und
True
oder zurückgibtFalse
. Direkte Umsetzung.quelle
PrimeQ
Threads über Listen, soOr@@PrimeQ@{#-1,#,#+1}&
(oderOr@@PrimeQ[#+{-1,0,1}]&
) funktioniert auch, für -1 Byte. (Obwohl ich glaube, ich weiß nicht, ob 2012PrimeQ
über Listen gefädelt wurde.)Stax , 6 Bytes
Führen Sie es aus und debuggen Sie es
Erklärung (ausgepackt):
quelle
JavaScript (71
7380)Demo: http://jsfiddle.net/ydsxJ/3/
Edit 1: Wechsle
for(i=2;i<j;i++)
zufor(i=1;++i<j;)
(danke@minitech
).if
Anweisung in ternär umwandeln . Verschobenr|=p
undp=1
in äußerefor
, um innere Zahnspangen zu beseitigen. 7 Zeichen gespeichert.Edit 2: Kombiniere
p=1
undj++<=n
ump=j++<=n
, speichere 2 Zeichen (danke@ugoren
).quelle
for(i=1;++i<j;)
anstelle vonfor(i=2;i<j;i++)
1 weiteres Zeichen speichern.!j%i
der Rangfolge nicht. Eine funktionierende Alternative istj%i<1
.p=j++<=n
? Wenn Javascript hier wie C ist, sollte es funktionieren.Regex (ECMAScript), 20 Bytes
^x?x?(?!(x+)(x\1)+$)
Probieren Sie es online!
Die obige Version behandelt Null nicht richtig, aber das benötigt nur 1 zusätzliches Byte:
^x?x?(?!(x+)(x\1)+$)x
Als zusätzlichen Bonus gibt es hier eine Version, die eine Rendite von
1
eins weniger als einer Primzahl,2
für eine Primzahl und3
für eine mehr als eine Primzahl ergibt :^x?x??(?!(x+)(x\1)+$)x
Probieren Sie es online!
quelle
C # 96
Es gibt -1,0,1 für wahr zurück, alles andere ist falsch.
Vorschläge, um es kürzer zu machen, wären wunderbar!
Erweiterte Form:
quelle
if(i==r-1)break;
und die Mitte derfor
Schleife voni<r
auf änderni<r-1
. Es würde Sie auf 82 bringen.GolfScript: 26
Erläuterung: Der innerste Block
{.:i,{i\%!},,2=@|\(}
bestimmt, ob die Oberseite des Stapels prim ist, indem überprüft wird, ob genau zwei Faktoren kleiner als die Oberseite des Stapels sind. Dies wird dann mit dem zweiten Gegenstand auf dem Stapel getrennt, der den Zustand enthält, ob ein Prime noch gesehen wurde. Schließlich wird die Zahl oben auf dem Stapel dekrementiert.Beginnen Sie, indem Sie den Eingang inkrementieren, den primären Status initialisieren und den Block dreimal wiederholen. Da diese zweimal verringern, aber wir begannen durch Erhöhen, wird diese Abdeckung
n+1
undn-1
.quelle
C #,
8797 Zeichenquelle
CJam, 12 Bytes
CJam ist viel jünger als diese Herausforderung, daher ist diese Antwort nicht für das grüne Häkchen geeignet (das ohnehin auf die zufällige Antwort aktualisiert werden sollte). Das Golfen hat Spaß gemacht - ich habe mit 17 Bytes angefangen und dann meine Herangehensweise dreimal komplett geändert, wobei ich jeweils ein oder zwei Bytes gespart habe.
Dies ist ein Block, der einer Funktion in CJam am nächsten kommt, die die Eingabe auf dem Stapel erwartet und eine 1 (wahr) oder 0 (falsch) auf dem Stapel hinterlässt.
Teste es hier.
So funktioniert es:
quelle
F #, 68 Bytes (nicht konkurrierend)
Probieren Sie es online!
Deshalb liebe ich Codegolf. Ich bin immer noch sehr grün mit F #, aber ich lerne so viel darüber, wie die Sprache funktioniert und was sie aus solchen Herausforderungen machen kann.
quelle
APL (Dyalog Classic) , 20 Byte
Probieren Sie es online!
quelle
Netzhaut , 22 Bytes
Probieren Sie es online!
Nimmt unär als Eingabe
quelle
Java 8, 83 Bytes
Gibt
true
/false
als wahrheitsgemäße / falsche Werte zurück.Probieren Sie es online aus.
Erläuterung: "
So
int p(int n)
führt in-1
fürn=0
und nicht-Primzahlen und wird in Folgen-1
fürn=1
oder Primzahlen. Dap(0)+p(1)+p(2)
wird-1+0+1 = 0
und würde falsch (auch wenn2
es sich um eine Primzahl handelt),n=1
ist das ein Randfall mit diesem Ansatz.Eine einzelne Schleife ohne getrennte Methode wäre 85 Bytes :
Gibt
1
/0
als wahrheitsgemäße / falsche Werte zurück.Probieren Sie es online aus.
Erläuterung:
quelle
Japt , 7 Bytes
Probieren Sie es online!
quelle
R 68 Zeichen
Verwendung (1 für WAHR, 0 für FALSCH):
quelle
i(n-1)|i(n)|i(n+1)
anstattifelse(i(n-1)|i(n)|i(n+1),1,0)
?C ++
quelle
Q,
43 Zeichen36quelle
J, 16 Zeichen
quelle
Python,
6967 Zeichen8**7 > 2**20
während etwas kürzer zu schreibenquelle
Ruby, 47 Zeichen, aber sehr gut lesbar
quelle
C ++ 97
ugoren scheint mich auf die clevere lösung geschlagen zu haben. Er ist also eine kürzere Version des dreifachen Ansatzes:
quelle
Viertens (gviertens) , 104 Bytes
Probieren Sie es online!
Erläuterung
Prime Check (p)
Hauptfunktion (f)
quelle
Julia 0,4 , 23 Bytes
Probieren Sie es online!
quelle
Gelee , 5 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle