Eine rechtsabschneidbare Primzahl ist eine Primzahl, bei der jedes Präfix eine Primzahl ist (in Basis 10). Eine linksabschneidbare Primzahl ist genau das Gegenteil, wobei jedes Postfix eine Primzahl ist (Primzahlen, die mit 0 beginnen, sind nicht zulässig). Beide Sequenzen sind endlich (es gibt nur 83 rechtsabschneidbare Elemente, während es 4260 linksabschneidbare Elemente gibt).
Sie müssen ein Programm schreiben, das eine einzelne Zahl als Eingabe akzeptiert und die n- te rechtskürzbare Primzahl erzeugt. Wenn das Programm jedoch rückwärts angeordnet gelesen wird , sollte es die n- te linksabschneidbare Primzahl erzeugen .
Um ein Programm rückwärts anzuordnen, teilen wir das Programm in Wörter auf und kehren dann die Reihenfolge der Wörter um. Ein Wort kann aus einer beliebigen Anzahl von Zeichen bestehen.
Zum Beispiel, wenn Folgendes Ihr Programm war:
hello world
1234567890
Folgendes wäre als mögliche Rückwärtsanordnungen zulässig:
Aufteilen auf jeden Charakter:
0987654321
dlrow olleh
Aufteilen auf Leerzeichen:
1234567890
world hello
Beliebige Aufteilung (zur Verdeutlichung Rohre hinzugefügt):
hel|lo w|orld
1|23456|7|8|90
908723456orld
1lo whel
Wenn Sie Ihr Programm rückwärts anordnen, müssen alle Leerzeichen wie bei jedem anderen Zeichen berücksichtigt und umgekehrt werden.
Vorwärts-Testeingaben:
1: 2
2: 3
21: 379
60: 239933
83: 73939133
Rückwärtstest-Eingaben:
1: 2
2: 3
39: 647
187: 29173
4260: 357686312646216567629137
Programme sollten in angemessener Zeit (weniger als eine Minute) ausgeführt werden können.
Dies ist ein Code-Golf , also gewinnt das Programm mit den wenigsten Bytes!
quelle
lo w
istorld\n1
. Die Newline beendet das Atom nichtAntworten:
Gelee ,
2623 BytesNach vorne
Probieren Sie es online aus!
Wörter
Ñ
¶
p
9
¶
7ÆR2ĿV€$ÆPÐf$ÐĿFị@
Rückwärts
Probieren Sie es online aus!
Wörter
7ÆR2ĿV€$ÆPÐf$ÐĿFị@
¶
9
p
¶
Ñ
Wie es funktioniert
Alle Jelly-Programme bestehen aus Links (Jellys übernehmen Funktionen), die durch Zeilenvorschübe oder Pilcrows (
¶
) getrennt sind. Der letzte von ihnen ist das Hauptglied ; Es wird automatisch aufgerufen, wenn das Programm ausgeführt wird.Das Vorwärtsprogramm funktioniert wie folgt.
Das Rückwärtsprogramm macht fast genau das gleiche; Es gibt nur zwei Unterschiede.
Der Hauptlink ist jetzt
Ñ
, der einfach den Link darunter aufruft (umlaufen), dh der Hauptlink des Weiterleitungsprogramms.9p
anstattp9
das umgekehrte kartesische Produkt zurückzugeben.quelle
Python 2,
143139 BytesBesteht aus fünf Teilen:
I=1
a={2}…[~-n]
I=0
Die Umkehrung dreht also nur den Wert von um
I
.Erläuterung
Die Funktion
f
führt eine rekursive Suche nach LTPs (Left Truncatable Primes) oder RTPs (Right Truncatable Primes) durch, abhängig vom Wert des GlobalI
. Diese Werte werden dem Satz hinzugefügta
. Dann wirdlambda n:sorted(a)[~-n]
dern
-te zurückgegeben.Definieren wir ein Blatt entweder als LTP, als RTP, als Ziffer ungleich Null + als LTP oder als RTP + als Ziffer ungleich Null. Dies sind alle Werte,
f
die jemals auf Primalität überprüft werden möchten.Ich habe einen Fermat-Pseudoprime-Test entwickelt, der für alle Blätter funktioniert:
(63973 ist eine Carmichael-Nummer .)
Wenn dieser Test true zurückgibt,
z
sollte er dem Satz hinzugefügt werdena
und wir sollten fortfahrenstr(z)
. Der verantwortliche Code ist:Zunächst möchten wir uns mit dem Fall befassen
z == 2
. Wir tun dies, indem2
wir es hier einfach ausweichen und beim ersten Definieren hart codierena
! (EDIT: Und nichts Schädliches passiert, wenn wir auch fangenz == 1
.) Also können wir dasz ≥ 3
jetzt annehmen .Ich habe einige „und“ in einen kurzgeschlossenen verketteten Vergleich übersetzt: Die ersten drei Vergleiche müssen vorher erfolgreich sein
a.add(z)
undf(u)
werden jemals ausgewertet. Hier sind alle ihre Rollen:Danksagung
u=[d+s,s+d][I]
→u=d[I:]+s+d*I
;z==2
→z<3
und den Mod 91- Trick). Vielen Dank!quelle