Satan-Primes
Wer sind Sie?
sie Primes
enthalten 666
diese sind Satan-Primzahlen: [46663,266677,666599,666683,616669]
diese sind NICHT :[462667,665669,36363631,555]
Handlung
Jede Zahl größer als 6661 hat Satan-Primes hinter sich
Die Herausforderung
Bei einer gegebenen Ganzzahl n>6661
finden Sie den Satan-Prime hinter (oder gleich) und am nächsten zu sich.
Beispiele
Integer n=30000
hat 3 Satan-Primes (SP) dahinter: [6661, 16661, 26669]
.
Ihr Code muss den Code zurückgeben 26669
, der dahinter am nächsten liegt
Testfälle
Eingabe-> Ausgabe
6662->6661
10000->6661
66697->66697 (a SP returns himself)
328765->326663
678987->676661
969696->966677
Regeln
Ihr Code sollte für jeden n
in Ihrem Sprachbereich funktionieren .
Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes!
output the nth satan prime
...Antworten:
Mathematica, 82 Bytes
quelle
Neim , 9 Bytes
Erläuterung:
Probieren Sie es online!
quelle
+6
schiebt 666? Oder ist Neim nur das Metall?+x
612 Zeichen + Code vonx
. Der Code von ist6
zufällig 54, also 612 + 54 = 666.'\+*
=100,356,612,868
(plus die Ordnungszahl des folgenden Zeichens, das ist)Gelee ,
109 BytesDank @Dennis 10% gespart!
Probieren Sie es online!
Erläuterung
quelle
ÆRẇ@Ðf666Ṁ
w
sollte funktionieren stattẇ@
.Pyth ,
15 bis14 Bytes1 Byte mit Hilfe von Dave gespeichert .
Speicherfehler für
969696
und irgendetwas höheres auf meinem Computer, aber es ist in Ordnung, wenn genügend Speicher vorhanden ist.Probieren Sie es hier aus oder schauen Sie sich die Test Suite an.
Wie?
Pyth , 14 Bytes
Probieren Sie es hier aus!
quelle
ef&/`T*3\6P_TS
"666"
ist ein weniger effizienter Weg, um die Zeichenfolge 666 zu beschreiben, die*3\6
05AB1E , 11 Bytes
Probieren Sie es online!
quelle
Bash + Core Utils,
5149 BytesÜbernimmt das Kommandozeilenargument. Kann bei größeren Zahlen recht langsam sein.
quelle
|head -1
das Ende hinzuzufügen .Mathematica,
64626153 Bytes-1 Byte dank @KellyLowder
-8 Bytes (wow) dank @Notatree
Erläuterung
Nehmen Sie eine Eingabe. Wir dekrementieren es unter diesen Bedingungen:
Die Eingabe ist nicht prim oder
Die Ziffern der Eingänge enthalten nicht drei 6er hintereinander.
Wir wiederholen das, bis ein Satan-Prime erreicht ist.
quelle
#//.i_/;!PrimeQ@i||ToString@i~StringFreeQ~"666":>i-1&
Perl 5 , 47 Bytes
46 Byte Code + 1 für
-p
Probieren Sie es online!
quelle
Japt , 14 Bytes
Probier es aus
Vorausgesetzt, es gab einen zeitabhängigen Bonus von 50%: Beendet den Testfall
969696
in weniger als einer halben Sekunde.Erläuterung
Implizite Eingabe einer Ganzzahl
U
.Generieren Sie ein Array von Ganzzahlen von
1
bisU
.Filter (
f
) Primzahlen.Umkehren.
Gibt das erste Element zurück, das (in diesem Fall
1
) einen Wahrheitswert zurückgibt, wenn es eine Funktion durchläuft, die prüft, ob ...Die in eine Zeichenfolge (
s
) konvertierte Ganzzahl enthält (ø
) 666.Schnellere Alternative, 15 Bytes
Da es ursprünglich einen zeitbasierten Bonus gab, ist hier wieder eine alternative und viel schnellere Lösung, die ich nicht weiter Golf spielen kann.
Probier es aus
quelle
PowerShell , 128 Byte
Probieren Sie es online!
PowerShell verfügt über keine eingebauten Primfaktor-Funktionen. Dieser Code stammt also aus meiner Antwort auf Prime Factors Buddies .
Wir nehmen Input
$n
und deklarieren dann einen neuenfunction f
, der die Inputfaktoren berechnet$a
. Wenn der Eingang$a
prim ist, wird dies nur zurückgegeben$a
.Der Hauptteil des Programms ist die
for()
Endlosschleife. Innerhalb der Schleife prüfen wir, ob$n
-match
es dagegen steht666
und ob$n
es Primzahl ist (dh$n
mit allen Faktoren von übereinstimmt$n
). Wenn ja, platzieren wir sie$n
in der Pipeline und geben sieexit
implizit aus. Ansonsten dekrementieren wir$n--
die Schleife und setzen sie fort.quelle
Python 2 ,
7776 BytesEdit: -1 Byte dank @ Mr.Xcoder
Langsame Laufzeit, läuft ein
O(n^2)
Probieren Sie es online!
Eine weitere 76-Byte-Lösung
Probieren Sie es online!
Mit SymPy 73 Bytes
Probieren Sie es online!
quelle
lambda x:max(q for q in range(x+1)if"666"in`q`*all(q%t for t in range(2,q)))
- Verwenden Siemax()
anstelle von[][-1]
PowerShell ,
716964 ByteProbieren Sie es online!
328765 benötigt ~ 30 Sekunden auf meinem Computer, überschreitet jedoch das 60-Sekunden-Limit für Tio.run.
678987 dauert ca. 1,5 Minuten.
quelle
MATL, 16 Bytes
Probieren Sie es bei MATL Online aus
Erläuterung
quelle
C ++ 389 Bytes
Dies ist ein volles Programm!
Sie benötigen Boost, um es zu kompilieren. (Oder kopieren Sie sie und fügen Sie sie in Ihre bevorzugte Online-C ++ - Shell ein.)
Führen Sie sie über die Befehlszeile aus und geben Sie n als Argument an.
Ungolfed:
Abkürzungen wurden in Bezug auf Zufallszahlentests vorgenommen. Der ursprüngliche Code begann mit dem Testen möglicher Primzahlen bei 6661 und wurde um zwei erhöht. Sie erhalten auch eine Compiler-Warnung, weil dort (-1) anstelle von npos steht.
Trotzdem läuft das ziemlich schnell. Bei meinem alten AMD Sempron 130 dauerte es nur etwa 40 Sekunden, um alle 214 Satan-Primzahlen unter 1.000.000 zu finden.
: ^ D
quelle
Bash + BSD-Spiele-Paket, 33
Probieren Sie es online aus .
quelle
tail -n1
.tail
hier vergessen habe. In der Tattail -1
ist sogar 1 weniger.Python 3 ,
85 8380 BytesHalvards ist 4 Bytes kürzer, weil es in Python 2 gemacht wird.
Probieren Sie es online!
Nehmen Sie sich etwas Zeit, es ist aufgrund seiner
O(n^2)
Komplexität extrem langsam .quelle
JavaScript (ES6),
5554 Byte-1 Byte dank @ThePirateBay.
Sehr langsam mit großen Eingaben. Primalitätstest angepasst von diesem Code Golf Antwort .
Timings
10000
dauerte 10 Sekunden328765
dauerte 3 Minuten678987
dauerte 9 Minuten969696
dauerte 16 MinutenTests
Einige davon lassen Ihren Browser für einige Minuten hängen.
Code-Snippet anzeigen
Schnellere Version, 56 Bytes
Beendet jeden Testfall in weniger als einer Sekunde.
quelle
d==1
mitd<2
dan>6661
.f=n=>/666/.test(n)&(g=d=>n%--d?g(d):d<2)(n)?n:f(n-1)
Löst bei größeren Zahlen einen Rekursionsfehler aus.f=n=>/666/.test(d=n)-eval("while(n%--d);d")?f(n-1):n
Ruby,
67,66,58, 56 BytesBeinhaltet
+7
Bytes für-rprime
Es ist ziemlich schnell und berechnet Werte
~2^52
in2^64
weniger als 5 Minuten (2011 MBP, Ruby 2.3.1).quelle
Stax , 10 Bytes
Führen Sie es aus und debuggen Sie es
Erklärung (ausgepackt):
quelle
PHP , 148 Bytes
Probieren Sie es online!
quelle
Perl 6 , 35 Bytes
Probieren Sie es online!
Einfache rekursive Lösung.
quelle
C # (.NET Core) ,
117115112 BytesProbieren Sie es online!
int
Deklarationen werden 3 Bytes gespart .Ich bin sicher, dass dies kürzer gemacht werden könnte; Vielleicht durch rekursives Aufrufen
func f
und Entfernen der äußerenfor
Schleife.Rekursiver Ansatz, 85 Bytes
Probieren Sie es online!
Ich bin mir nicht sicher, wie gut dieser Ansatz in die Grenzen des Code-Golfs passt, weil ich den
Func<int,int> f = null
ersten setzen muss, und dasf
wird erneut aufgerufen, aber nicht zu den Bytes gezählt. Jede Klarstellung wäre dankbar.quelle