Bei einer positiven Ganzzahl als Eingabe bestimmen Sie, ob es sich um eine großmütige Zahl handelt.
Eine großmütige Zahl ist eine Zahl, bei der jede Einfügung eines +
Zeichens zwischen zwei Ziffern in der Basis 10 zum Ausdruck einer Primzahl führt.
Zum Beispiel ist 40427 großmütig, weil
4+0427 = 431 is prime
40+427 = 467 is prime
404+27 = 431 is prime
4042+7 = 4049 is prime
Ausgabe
Sie sollten zwei unterschiedliche Werte ausgeben, einen, wenn die Eingabe großartig ist, und einen, wenn die Eingabe nicht großartig ist.
Wertung
Das Ziel dieses Wettbewerbs ist es, die Größe des zur Lösung dieser Aufgabe geschriebenen Quellcodes in Byte so klein wie möglich zu halten.
Testfälle
1 -> True
2 -> True
4 -> True
10 -> False
98 -> True
101 -> True
109 -> False
819 -> False
4063 -> True
40427 -> True
2000221 -> True
1
mit einem zwischen zwei beliebigen Zeichen eingefügten Pluszeichen (kein Einfügen) nur ergeben kann1
, was selbst kein Prim ist.1
und2
keine zwei Ziffern enthält. Alle Mitglieder der leeren Menge sind Primzahlen. Darüber hinaus ist keiner von ihnen, aber das ist neben dem Punkt. Es ist ein bisschen verwirrend, das gebe ich dir, aber ich denke, es ist sinnvoller als die Alternativen.Antworten:
05AB1E , 10 Bytes
Code
Verwendet die 05AB1E- Codierung. Probieren Sie es online! oder Überprüfen Sie alle Testfälle!
Erläuterung
quelle
1 - 9
. Das Produkt eines leeren Sets ist 1? Warum?1
jedem Element im Set und multipliziert es damit.sum
auf[]
entspricht0
, die Induktion Eigenschaft verwenden , wenn war ziemlich intelligent umzusetzen.C (gcc) , 83
848583848675111BytesAlle Optimierungen deaktiviert und nur auf 32-Bit-GCC.
-1 Byte dank @ceilingcat
+ einige Bytes für den
1
Fall.+ einige Bytes für wiederverwendbare Funktionen.
Übernimmt die Eingabe als Ganzzahl. Geben Sie 1 für falsche Fälle und 0 für wahre Fälle zurück.
Probieren Sie es online!
Siehe meine andere Antwort für Mathematica-Code (55 Bytes).
quelle
1
,98
und4063
.Retina , 38 Bytes
Probieren Sie es online!
Druckt
1
für großmütige Zahlen und0
sonst.Erläuterung
Wir beginnen damit, jede Position zwischen zwei Ziffern (Positionen, die keine Wortgrenzen sind) abzugleichen und das Präfix und das Suffix dieser Übereinstimmung in unary einzufügen, wobei
_
als unary-Ziffer verwendet wird. Anstatt also+
s einzufügen, fügen wir dort direkt das unäre Ergebnis der Summe ein.Jetzt teilen wir die Zeichenfolge um Ziffern auf, sodass jede Summe in einer eigenen Zeile steht und wir diese Ziffern entfernen (es wird auch eine leere führende und nachfolgende Zeile geben, aber das ist nicht wichtig).
Dies ist der Standard-reguläre Ausdruck, um Nicht-Primzahlen in Unary abzugleichen. Wenn Sie hier eine
G
Wiederholungsstufe verwenden, behalten Sie einfach alle Zeilen bei, die positive Nicht-Primzahlen enthalten (verwerfen Sie die leeren Zeilen).Zuletzt prüfen wir, ob der String leer ist. Wenn die Eingabe großmütig war, hat die vorherige Stufe alle Zeilen verworfen (weil sie alle Primzahlen waren), und dies gibt uns
1
. Wenn eine Zeile keine Primzahl war, bleibt sie in der Zeichenfolge und der reguläre Ausdruck schlägt fehl0
.quelle
Python 2 ,
827978 BytesDies ist langsam und kann nur die Testfälle mit Memoisierung bewältigen.
Probieren Sie es online!
Alternative Version, 79 Bytes
Beschleunigt auf Kosten eines Bytes.
Probieren Sie es online!
quelle
Gelee , 12 Bytes
Probieren Sie es online!
Überprüfen Sie alle Testfälle.
quelle
d
!Java 8,
1751719488 Bytes-77 Dank an @PeterTaylor, indem Sie eine Arithmetik (anstelle von String with
.substring
) verwenden und die separate Methode loswerden, um zu überprüfen, ob die Ganzzahl eine Primzahl ist.-6 Bytes mit @SaraJs Prime-Checking-Methode , also stelle sicher, dass du sie positiv bewertest!
Probieren Sie es hier aus.
Erläuterung:
quelle
p
durch Rekursion. Sammeln Sie zweitens die Ergebnisse so, dass für die Hauptfunktion nur einereturn
Anweisung erforderlich ist , indem Sie den Sentinel-Wert vonp
be angeben-1
und mit&
prüfen, ob alle zurückgegebenen Werte vorhanden sind-1
.n->{for(long d=10,m=1;d<n;d*=10)m|=p(n/d+n%d,2)-2;return m>0;}long p(long n,int i){return i<n?p(n%i<1?1:n,i+1):n;}
d<=n
um damit umzugehen10
. Ein Stapelüberlauf ist kein Problem (die Spezifikation gibt keinen Eingabebereich an, der behandelt werden muss), kann jedoch behoben werden, und weitere Einsparungen werden durch Zurücksetzen auf eine Schleife und Inlining erzielt .Pyth , 14 Bytes
Probieren Sie es online! Wird angezeigt,
True
wenn die Zahl großmütig ist,False
ansonsten. Nimmt die Nummer als String.Erklärungen
quelle
Python 2 ,
104 102 98 96103 Bytesi
Vollständig anonymisiert, da es nur einmal aufgerufen wird.x-1
um nurx
die Prime Checking-Grenze zu überschreiten.x=10
wurde behoben, wodurch dank @Dennis und @Wheat Wizard für das Erkennen 7 Bytes hinzugefügt wurden: Meine frühere Version betrachtete 1 als PrimzahlProbieren Sie es online!
quelle
x-1
am Ende des Bereichs nicht; Bereich ist exklusiv auf der rechten Seite.Japt ,
2416 BytesDies war so ziemlich eine Zusammenarbeit zwischen @Shaggy, @ETHproduction und mir.
Probieren Sie es online!
Übernimmt die Eingabe als Zeichenfolge.
quelle
x
konvertiert die Elemente im Array automatisch in Zahlen ;-)XîU
Genie. Ich denke,U¯X
funktioniert für die gleiche Länge, aber immer nochPip ,
2524 BytesProbieren Sie es online!
Erläuterung
a
ist das erste Befehlszeilenargument.1,#a
Erzeugt einen Bereich mit Zahlen1
bislen(a)-1
. Dazu bilden wir eine Lambda-Funktion ab:Als nächstes bilden wir eine andere Lambda-Funktion ab
0N_%,_=1
, die auf Primalität prüft. Ich habe es dieser Antwort entnommen ; Sie können die Erklärung dort lesen. Zum Schluss falten wir die Liste auf logisches AND ($&
). Das Ergebnis ist1
wenn alle Beträge erstklassig waren,0
wenn keiner von ihnen es war.Beispiel mit Eingabe von
4063
:quelle
CJam , 22 Bytes
Probieren Sie es online!
Gibt eine positive Ganzzahl für Wahrheit und eine Null für Falschheit aus.
-1 dank eines cleveren Tricks von Peter Taylor .
-3 danke an einen anderen tipp von peter taylor.
quelle
0&!
ist kürzer als1+:*
!
ein boolescher und verwendeter Mengenschnitt mit dem falschen Wert zurückgegeben wird,0
sodass Sie0&!
3 anstelle von1&!!
...,
Filteroperator verwendenf
.!
der Konvertierung in einen Booleschen Wert: Das war Standard in GolfScript und ist Standard in CJam. Und1&!!
wäre falsch:0&!
Ist der naheliegende Test, weil die Anforderung für alle nicht besteht.Japt , 23 Bytes
Übernimmt die Eingabe als Zeichenfolge.
Dang es; auf eine viel kürzere Alternative geschlagen, an der ich gearbeitet habe.
Probier es aus
quelle
¬£i+YÄÃe@OxX j
4063
(sollte wahr sein, ist falsch). Der Trick dabei ist, dass JS glaubt, ein führendes0
Mittel zu haben, dass Sie ein Oktal wollen ...40043
zum Beispiel) Fügen Sie einfach+
nach dem ein0
, um das Problem zu beheben.Mathematica, 75 Bytes
Function
das erwartet aString
.PrimeQ@ToExpression@StringInsert[#,"+",n]
Gibt zurück, ob das Einfügen eines+
nach dern
vierten Ziffer eine Primzahl ergibt.Table[...,{n,2,StringLength@#}]
Gibt die Liste dieser Werte inn
Bereichen von2
bis zur Länge der Zeichenfolge an. Wir nehmen dannAnd
jedes der Elemente dieser Liste. Wenn ja,StringLength@#<2
dannTable[...]
ist die leere Liste, für dieAnd@@{}==True
quelle
Mathematica, 55
504549505462BytesEs scheint, ich sollte es separat posten.
+6 Bytes für neu gemessene Codelänge.
+5 Bytes dank Genisis.
Übernimmt die Eingabe als Ganzzahl und gibt reguläres
True
und zurückFalse
. Das
Dazwischen ist Unicode 0xF4A1, kurz fürFunction[,]
. Die Codelänge wird anhand der Dateigröße (UTF-8 ohne Stückliste) gemessen. Kommentieren Sie, wenn dies nicht korrekt ist.PowerRange[x]
gibt 1, 10, 100 ... nicht größer als zurückx
, was in Mathematica 10 eingeführt wird.quelle
Englisch
4,204341315251241240 Bytes(Neu-) Aufnahme von Primalitätstests in die Bibliothek von Plain English, indem 3.863 Bytes in die Bibliothek von Plain English verschoben werden. 26 Byte Leerraum gelöscht. 64 Byte durch Abkürzung lokaler Variablen eingespart. Durch Abkürzung der Schnittstelle 10 Byte eingespart. Nach dem Vorschlag von RosLuP wurde 1 Byte gespart, indem geändert wurde , wie m initialisiert und inkrementiert wird.
Ungolfed-Version des endgültigen Codes:
Anmerkungen: Die Plain English IDE ist unter github.com/Folds/english verfügbar . Die IDE läuft unter Windows. Es wird in 32-Bit-x86-Code kompiliert.
Die dynamische Gabelung des Osmosianischen Ordens für einfaches Englisch wurde bereits in Version 4700 auf Primalität getestet, verwendete jedoch einen sehr ineffizienten Algorithmus (Stand Januar bis Juni 2017). In den Versionen 4001-4011 der dynamischen Verzweigung der GitHub-Site wurden keine Primalitätstests durchgeführt. Version 4013 der dynamischen Verzweigung der GitHub-Site enthält Primalitätstests. Der Code zum Durchführen des Primalitätstests wurde im Rahmen früherer Überarbeitungen dieser Antwort entwickelt.
quelle
Perl 6 , 58 Bytes
Probieren Sie es online!
10, 10 * * ...^ * > $_
ist die geometrische Folge von Vielfachen von zehn, bis eins vor dem Element, das den Eingabeparameter überschreitet$_
. Dann überprüfen wir einfach, dass für jede Zehnerpotenz die Summe der Eingangsparameter div und mod, die diese Potenz hat, die Primzahl ist.quelle
Haskell,
114110 BytesUngolfed mit Erklärung:
quelle
p x=[x]==[i|i<-[2..x],x`mod`i<1]
als Prime Check verwenden, können Sie 2 Bytes einsparen.divMod x$10^i
stattdessen auchx`divMod`(10^i)
Axiom 88 Bytes
Test und Ergebnisse
quelle
Brachylog , 11 Bytes
Probieren Sie es online!
quelle
Perl 6 , 35 Bytes
Probieren Sie es online!
Erläuterung:
quelle
Gestapelt , 51 Bytes
Probieren Sie es online!
Dies ist eine Funktion. Es konvertiert sein Argument in einen String (
tostr
), dupliziert es und erhält seine Länge (:#'
), subtrahiert 1 (1-
) und erstellt einen Bereich von 1 bis zu dieser Zahl (~>
). Der Stack sieht für die Eingabe ungefähr so aus40427
:Wir führen eine Vektorisierung durch
splitat
, was dazu führt, dass das folgende Array ganz oben auf dem Stapel steht:Wenn
tr
wir dies umsetzen , erhalten wir:Dann ordnen wir die Funktion
['+',' '#
# ~ prime](with
map`) zu. Diese Funktion macht:Dann verketten wir nach der Karte
1
. Dies ist seitall
Rückkehrundef
für eine leere Liste.quelle
JavaScript (ES6), 70 Byte
Schlägt im letzten Fall in meinem Browser aufgrund eines Fehlers "zu viel Rekursion" während der Berechnung fehl
P(200023)
. Ich hoffe, das macht es nicht ungültig.quelle
QBIC , 38 Bytes
Erläuterung
quelle
CJam (21 Bytes)
Online-Demo , Online-Testsuite
Präparation
quelle
Pyth,
15 bis14 BytesTestsuite
Mit Pyths neuester Änderung ein Byte gespeichert.
quelle
APL (NARS), Zeichen 35, Bytes 70
Prüfung:
Dies wäre die Übersetzung in APL von Axiom post algo hier ...
quelle
PHP, 100 Bytes
druckt,
1
wenn die Eingabe großmütig ist, leere Ausgabe, wenn nicht. Laufen Sie als Pipe mit-nR
oder versuchen Sie es online .quelle
Perl 5
-p
, 42 BytesProbieren Sie es online!
quelle