Herausforderung
Bei einer gegebenen Eingang ganzzahligen n > 0
Ausgang die Anzahl der Primzahlen ( andere als das n
, wenn n
ich eine Primzahl ist ) , die durch die Veränderung eine Ziffer in der Dezimaldarstellung von n erzeugt werden kann (ohne die Anzahl der Ziffern zu ändern).
Beispiele
Zum Beispiel n = 2
. Durch die Veränderung einer Ziffer in der Dezimalentwicklung 2
, können wir mit drei weiteren Primzahlen kommen, 3, 5, 7
so a(n) = 3
.
Für ein anderes Beispiel n = 13
. Durch die Veränderung einer Ziffer, können Sie Primzahlen 11, 17, 19, 23, 43, 53, 73, 83
, so a(13) = 8
.
Als letztes Beispiel n = 20
. Durch die Veränderung einer Ziffer, können Sie Primzahlen 23, 29
, so a(20) = 2
.
Sequenz
Hier sind die ersten 20 Begriffe, mit denen Sie beginnen können. Dies ist OEIS A048853 .
4, 3, 3, 4, 3, 4, 3, 4, 4, 4, 7, 4, 8, 4, 4, 4, 7, 4, 7, 2
Regeln
- Es kann davon ausgegangen werden, dass die Eingabe und Ausgabe in den systemeigenen Ganzzahltyp Ihrer Sprache passen.
- Die Ein- und Ausgabe kann in jedem beliebigen Format erfolgen .
- Führende Nullen ignorieren (zum Beispiel
03
ist in dieser Formulierung keine Primzahl). - Es ist entweder ein vollständiges Programm oder eine Funktion zulässig. Bei einer Funktion können Sie die Ausgabe zurückgeben, anstatt sie zu drucken.
- Fügen Sie nach Möglichkeit einen Link zu einer Online-Testumgebung hinzu, damit andere Benutzer Ihren Code ausprobieren können!
- Standardlücken sind verboten.
- Dies ist Codegolf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.
quelle
n
für das die Ausgabe ist0
. Ich denke es istn = 200
. Ich denke auch , sie kommen in Trauben:200,202,204,206,208
,320,322,...,328
,510,...,518
,620,...628
,840,...,848
etc.Antworten:
05AB1E ,
17161411 BytesErläuterung:
Probieren Sie es online! oder bis zu 100 .
quelle
.L
? Ernst?.L
?!?!L
.<
, um ein Byte zu speichern. Auch wenn der Filter100
/1000
/10000
/ etc nicht entfernt , ist es sowieso nie eine Primzahl und hat keinen Einfluss auf die Ausgabe.Python 2 ,
146 136 127 121118 BytesDanke an @ Mr.Xcoder für die Vorschläge
Erläuterung:
Generieren Sie Zahlen mit einer Länge, die der eingegebenen Länge entspricht. Überspringen Sie zuerst (1,10,100,1000, ...).
Stellen Sie sicher, dass sich die generierte Nummer nur um eine Ziffer von der Eingabe unterscheidet
Auf Prime prüfen
Anzahl
Probieren Sie es online!
quelle
r=range
, weil Sie es oft verwenden ...?143
? Weil ich seherange(1,10)
, das schließt aus0
und103
ist prime0
inr(0,10)
.r(10)
genügt.lambda I,r=range:
Javascript (ES6) 148 Bytes
Nimmt die Eingabe als Zeichenfolge und gibt sie als Zahl zurück
Beispielcode-Snippet:
quelle
Jelly ,
211815 Bytes3 Bytes dank Dennis.
Probieren Sie es online! oder Überprüfen Sie alle Testfälle .
quelle
æḟ⁵æR×⁵$DnDS€ċ1
spart ein paar Bytes.Mathematica, 105 Bytes
Probieren Sie es online!
Function
das erwartet eine positive ganze Zahl#
. Setztf
gleich der Funktion,IntegerDigits
die die Liste der Ziffern ihrer Eingabe zurückgibt. Wir nehmen dasRange
vong
bis10g
(einschließlich), wobeig=10^Length@f@#/10
die größte Potenz10
kleiner oder gleich der Eingabe ist#
, dannCount
dien
solche, dassPrimeQ@n&&MatchQ[f@n-f@#,{x=0...,_,x}]&&n!=#
.PrimeQ@n
prüft, obn
es sich um eine Primzahl handelt,MatchQ[f@n-f@#,{x=0...,_,x}]
prüft, ob der Unterschied zwischen der Liste der Ziffern vonn
und#
der Form entspricht{0..., _, 0...}
, undn!=#
stellt sicher, dassn
und#
sindUnequal
.quelle
JavaScript (ES6),
153142139 ByteAkzeptiert Eingaben als Zeichenfolge. Undefiniertes Verhalten bei ungültigen Eingaben, obwohl es bei jeder erdenklichen Zeichenfolge fehlerfrei enden sollte. Nicht unbedingt vor dem Hitzetod des Universums, besonders für lange Saiten.
Demo
Verbesserungen
Sie haben 11 Byte eingespart, indem Sie die
reduce()
Aufrufe inmap()
Aufrufe umgestaltet und das Array implizita
in den Funktionsparameter anstatt in den Kontext dessplice()
Aufrufs kopiert haben .Gespeichert 3 Bytes dank @Neil ‚s Vorschlag zu konvertieren
[...Array(10)]
zu[...''+1e9]
.Unbegrenzter Code
Erläuterung
Die Funktion verwendet eine zweistufige
map()
Summe der Permutationen, die den Primalitätstest bestehen, der aus dieser Antwort ausgeliehen und geändert wurde .(Originalantwort)
Um zum Beispiel die Summe eines Arrays zu berechnen, übergeben Sie ein
initialValue
von0
und geben einaggregate
Gleich zurückaccumulator + currentValue
. Wenn Sie diesen Ansatz leicht modifizieren, berechnen wir stattdessen die Anzahl der Permutationen, die den Primalitätstest bestehen:Das ist im Wesentlichen das Innere
reduce()
, das alle Permutationen des durchläuft,digitArray
indem jedesdecimal
auf ein bestimmtes geändert wirdpermutatedDigit
. Wir brauchen dann ein Äußeresreduce()
, um alle möglichen zu iterierenpermutatedDigit
, um jedes zu ersetzendecimal
, was gerecht ist0-9
.Unregelmäßigkeiten bei der Durchführung
[...''+1e9].map((u,j)=>...
war der kürzeste Weg @Neil von iterieren ein Argument denken konnte0
durch9
. In diesem Fall ist dies vorzuziehenu
, jedochu
nicht für jedes Element im Array sinnvoll.i+j
In der ternären Bedingung wird überprüft, ob0
es sich um eine mögliche Permutation der führenden Ziffer gemäß der Challenge-Spezifikation handelt.j!=c
stellt sicher, dass das Originaln
kein Kandidat für den Primalitätstest ist.(a.splice(i,1,j),a.join``)
ist eine Art Durcheinander.splice()
Ersetzt die Zifferdecimal == i
mit dempermutatedDigit == j
, aber dasplice()
die entfernten Elemente (in diesem Fall wäre das gleich[a[i]]
) anstelle des geänderten Arrays zurückgegeben werden, müssen wir den Kommaoperator verwenden, um das geänderte Arraya
an den Primitätstest zu übergeben, jedoch nicht bevor wirjoin()
es übergeben in eine Zahlenfolge.Schließlich soll
eval()
ein Byte gespeichert werden, da es im Vergleich zum kanonischeren Ansatz kürzer ist:Der Verweis auf den Primetest
p
wird in einem nicht verwendeten Argument zummap()
Aufruf initialisiert .quelle
[...''+1e9]
ist kürzer.Python 2 , 134 Bytes
Probieren Sie es online!
Elegantere, längere Version:
Die Eingabe wird als Zeichenfolge verwendet.
Erklärung (ältere Version)
lambda x,r=range,l=len:
- Definiert ein Lambda mit einem String-Parameterx
und zwei konstanten Parameternr=range
undl=len
.sum(1...)
- Holen Sie sich die Länge, die 1 Byte über spartlen([...])
.for f in r(10**~-l(x),10**l(x))
- Erzeugt absolut alle Zahlen mit der gleichen Größenordnung wie die Eingabe (erwartet für0
). Zum Beispiel würde eine Eingabe von3
, ergeben[1, 2, 3, 4, 5, 6, 7, 8, 9]
.sum(1for t in r(l(x))if`f`[t]==x[t])==~-l(x)and f>1
- Überprüft, ob die aktuelle Nummer genau 1 Stelle von der Eingabe entfernt ist und ob sie höher als 1 ist.all(f%v for v in r(2,f))
- Überprüft, ob die aktuelle Nummer eine Primzahl ist.quelle
sum(1for..ifBOOL)
,sum(BOOLfor)
um einige Bytes zu speichern</joke>
)JavaScript (ES6), 137 Byte
Passt meine andere Antwort mithilfe der Web-API-Methoden
prompt()
und in eine vollständige Programmübermittlung analert()
.quelle
Bean , 126 Bytes
Probieren Sie es online!
Eine Anpassung meines JavaScript-Vollprogramms .
JavaScript-Äquivalent
Erläuterung
a
wird implizit als erste Eingabezeile als Zeichenfolge initialisiert und die letzte Anweisungs
wird implizit ausgegeben, die die Summe der Primzahlpermutationen enthält.quelle
Schale , 32 Bytes
Probieren Sie es online!
Ungolfed / Erklärung
quelle
Japt ,
2823 Bytes-5 Bytes dank @ETHproductions.
Nimmt einen String als Eingabe.
Probieren Sie es online!
quelle
¬x@AÇ|Y©+UhYZsÃâ kUn)èj
?PHP ,
151147141140136134129128 Bytes-6 Bytes dank @Einacio; -1 Byte dank @Titus
Probieren Sie es online!
Formatiert mit Kommentaren:
Um es so kurz wie möglich zu halten, habe ich:
$f = $t = 1
;++
Inkrement als Teil eines anderen Ausdrucks einbinden$f += $i % $t++ == 0
(das Inkrement wird nach der Modul-Operation ausgeführt und hat somit keinen Einfluss auf das Ergebnis);if
Anweisung für ein bedingtes Inkrement zu verwenden, haben wir die Tatsache ausgenutzt, dass der boolesche Wert true, wenn er als Ganzzahl umgewandelt wird, zu 1 wird,$c += $f == 2;
anstattif ($f == 2) $c++;
.quelle
levenshtein
. Gute Idee!$i%$t++<1
ist kürzer als$i%$t++==0
.Perl 6 , 83 Bytes
Probieren Sie es online!
quelle
X~
stattmap
? 81 BytesPHP, 100 + 1 Bytes
Laufen Sie als Pipe mit
-nR
oder probieren Sie es online aus .Nervenzusammenbruch
quelle
Java 8,
201194 BytesErläuterung:
Probieren Sie es hier aus.
new Integer(s.substring(0,i)+j+(i<l?s.substring(i+1):"")
ergibt diese ganzen Zahlen:Für
0-9
:1, 2, 3, 4, 5, 6, 7, 8, 9
.Für
10
:10, 20, 30, 40, 50, 60, 70, 80, 90, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
.Für
11
:11, 21, 31, 41, 51, 61, 71, 81, 91, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
.etc.
quelle
JavaScript (ES7), 118 Byte
Übernimmt die Eingabe als Zeichenfolge.
Probieren Sie es online!
Kommentiert
quelle
Ruby mit
-rprime
101 Bytes-rprime
Probieren Sie es online!
quelle