Sie müssen die kleinste Primzahl mit n
Ziffern generieren. Sie enthält nur die in der Liste angegebenen Ziffern k
.
Beispiele:
Eingang:
4
1 2
Dazu müssen Sie die kleinste Primzahl mit 4
Ziffern erzeugen , und diese Primzahl darf nur die Ziffern 1
und enthalten 2
.
Ausgabe:
2111
Eingang:
10
0 4 7
Ausgabe:
4000000007
Eingang:
6
5 5 5 5 5 5 5 5 5 5 1 5 5 5 5 5 5 5 5 5 5
Ausgabe:
115151
Sie können garantieren, dass die Eingabe immer in dem von Ihnen angegebenen Format erfolgt, und Sie können alles tun, wenn Sie eine ungültige Eingabe erhalten (z. B. eine einstellige Eingabe n
ohne k
.).
Wenn für eine Eingabe keine solche Lösung vorhanden ist, kann Ihr Programm eine der folgenden Aktionen ausführen:
- Drucken
banana
- Wirf einen Fehler
- Laufen Sie für immer
- Noch etwas
Da es sich um Code-Golf , versuchen , für den kürzesten Code zu zielen.
Die Eingabe kann in jedem von Ihnen angegebenen Format erfolgen. Wenn Sie beispielsweise möchten, dass Ihre Eingabe wie folgt aussieht, ist dies in Ordnung.
4
[1, 2]
[1,2]4
1,2
4
4 12
Sie können entweder ein Programm oder eine Funktion schreiben, und es muss entweder der richtige Wert zurückgegeben oder gedruckt werden.
Leerzeichen sind überall erlaubt.
Diese Herausforderung inspiriert von A036229 .
Antworten:
Brachylog (2), 8 Bytes
Probieren Sie es online!
Sehr langsam bei Problemen mit vielen möglichen Ziffern oder mit einer 0 in der Menge der möglichen Ziffern (dies funktioniert in diesem Fall; es ist nur so viel langsamer, dass TIO das Zeitlimit überschreitet, es sei denn, das Problem ist sehr einfach). Wie bei Brachylog üblich, ist dies eine Funktion, kein vollständiges Programm.
Die Eingabe erfolgt im Format
[ndigits,[list of digits]]
, z[10,[[0,4,7]]]
.Erläuterung
Aus rein deklarativer Sicht heißt das: "Finde eine Primzahl mit der angegebenen Anzahl von Ziffern, wobei alle Ziffern eine der angegebenen Ziffern sind". Um die kleinste solche Zahl zu finden , verwenden wir Hinweise zur Bewertungsreihenfolge, um sicherzustellen, dass die Reihenfolge, in der wir die Zahlen testen, klein bis groß ist. In diesem Fall sind
ᵐ
Entscheidungen am Anfang der Liste weniger anfällig für Änderungen als Entscheidungen am Ende (dies ist die natürliche Reihenfolge, die zufällig der lexikografischen und damit der numerischen Reihenfolge von ganzen Zahlen entspricht) und haben daher{o∋}ᵐ
zwei Auswertungsreihenfolgen Hinweise: "Variieren Sie die letzten Ziffern zuerst" (aus derᵐ
natürlichen Reihenfolge) als wichtigeren Hinweis und "Überprüfen Sie die kleineren Ziffern vor den größeren Ziffern" (aus der Reihenfolgeo
vor der∋
, was in diesem Zusammenhang als Hinweis dient) als Tiebreak.{o∋}ᵐ
kann als Äquivalentoᵐ∋ᵐ
zum Speichern eines Bytes geschrieben werden.quelle
Bash + BSD-Spiele-Paket, 28 Bytes
Eingabe in der Befehlszeile als n, gefolgt von k als nicht begrenzte Ziffernliste.
Probieren Sie es online aus.
quelle
Python 2 , 66 Bytes
Probieren Sie es online!
Nimmt Eingaben wie
f(3,{'9','3','8'})
.In Python sind keine Primzahlen integriert, daher generiert die Funktion diese mithilfe von Wilsons Theorem , um jeden potenziellen Wert auf
k
Primzahlen zu prüfen .Die verkettete Ungleichung
10**~-n<p%k*k<s>=set(`k`)
kombiniert drei Bedingungen aufk
:10**~-n<k
:k
enthält mindestensn
Ziffern. Wir müssen nicht genau prüfen, denn wenn wir mehr Ziffern erreichen, muss es keine Lösung gegeben habenp%k>0
:k
ist prim, über die Wilsonsche Theorembedingung mitp=(n-1)!^2
. Dap%k
0 oder 1 ist, kann dies mit der vorherigen Bedingung als kombiniert werden10**~-n<p%k*k
s>=set(`k`)
: Alle Ziffern ink
sind im Satzs
. Dies kann eingemischt werden, da Python 2 Mengen als größer als Zahlen betrachtet.Wenn der Strom
k
nicht alle diese Anforderungen erfüllt, kehrt die Funktion zu zurückk+1
und addiert 1 zu der resultierenden Ausgabe. Da die Ausgabe mit "True
gleich" endet1
und bei "k
beginnt" beginnt1
, ist die Ausgabe "gleich"k
. Diese parallele Verfolgung vonk
Beats wirdk
direkt nach dem Erfolg ausgegeben .quelle
JavaScript (ES7), 100 Byte
Übernimmt die Eingabe als Anzahl der Stellen
n
und Zeichenfolge der zulässigen Stellens
in der aktuellen Syntax(n)(s)
. Gibt zurück,undefined
wenn keine Lösung gefunden wurde.Funktioniert ziemlich schnell für bis zu 6 Stellen, arbeitet möglicherweise für 7 und ist definitiv zu langsam - und speicherhungrig - darüber hinaus.
Prüfung
Code-Snippet anzeigen
quelle
n=>s=>[...Array(10**n).keys()].find(i=>eval(`/[${s}]{${n}}/`).test(i)&(p=j=>i%--j?p(j):j==1)(i))
Gelee , 12 Bytes
Nimmt eine Menge und eine Ganzzahl als Befehlszeilenargumente. Gibt 0 aus, wenn keine Lösung vorhanden ist.
Probieren Sie es online!
Wie es funktioniert
quelle
Pyke,
1816 BytesProbieren Sie es hier aus!
Läuft für immer, wenn keine Werte gefunden werden
quelle
Mathematica, 64 Bytes
Reine Funktion, bei der das erste Argument die (sortierte) Liste der zulässigen Ziffern und das zweite Argument die zulässige Länge ist.
Tuples@##
berechnet alle Listen der erlaubten Ziffern der erlaubten Länge, dann finden wirFirstCase
die Übereinstimmungenx:{f_,___}
so, dass die erste Zifferf
nicht0
und die ganze Zahly=FromDigits@x
eine Primzahl ist und ersetzen sie durchy
.quelle
/;
Test verwenden, um ein Tupel auszuwählen, aber auch:>
in das gewünschte Ausgabeformat zu konvertieren. (Ich sehe in der Dokumentation, dass das erlaubt ist, aber erst nach dem Lesen dieser Antwort!) Sie sollten angeben, dass Ihre Funktion das Sortieren der erlaubten Ziffern erfordert: Sie gibt die falsche Antwort3331
statt3313
wenn sie mit aufgerufen wird[{3,1},4]
.Select[FromDigits/@Tuples[Sort@#,#2],PrimeQ][[1]]&@@#&
?0
und die@@#&
überflüssig scheinen.Brachylog , 15 Bytes
Probieren Sie es online!
Das ist ziemlich langsam.
Erläuterung
quelle
JavaScript (ES6), 86 Byte
Übernimmt Eingaben über die Currying-Syntax, zB
(4)('12')
Wird im strikten Modus ausgeführt (zur Tail-Call-Optimierung [TCO] ). Wenn Ihre Umgebung keine TCO unterstützt, führt dies bei Primzahlen, die größer als der Umgebungsstapel sind, zu einem Stapelüberlauf.
Für ungültige Eingaben wird es für immer ausgeführt.
Hinweis:
chrome://flags/#enable-javascript-harmony
dieses Flag aufrufen und aktivieren, um das obige Snippet mit TCO-Unterstützung auszuführen.quelle
F=i=>(P=j=>i%--j?P(j):1==j)(i)&&...
MATL, 17 Bytes
Diese Funktion akzeptiert zwei Eingaben, eine Ganzzahl, die die Anzahl der Stellen angibt, und ein Zeichenarray, das die möglichen Werte angibt. Wenn keine Primzahlen vorhanden sind, wird ein Fehler angezeigt.
Probieren Sie es online!
Erläuterung
quelle
Pyth -
1312 BytesTest Suite .
quelle
Salbei, 62 Bytes
Übernimmt die Eingabe des Formulars:
f( 4 , {'1','2'} )
quelle
Perl 6 , 43 Bytes
Läuft für immer, wenn keine Lösung vorhanden ist.
quelle
05AB1E , 17 Bytes
Probieren Sie es online!
quelle
05AB1E ,
221918 Byte (-1 @Riley)Probieren Sie es online!
quelle
,
am Ende brauchst .Perl5, 77 Bytes
Laufen Sie wie folgt:
quelle
Ruby,
7776 BytesEingabeformat: eine Zahl und eine Zeichenfolge.
Beispiel:
quelle
Perl 6 , 68 Bytes
Versuch es
Gibt zurück,
Nil
wenn keine solche Primzahl gefunden werden kann.Erweitert:
quelle
Python 2 + Primefac ,
9185 BytesProbieren Sie es online aus
Eingabe ist wie
4,{'1','2'}
.quelle
1,{'1'}
ist keine gültige Eingabe (da 1 keine Primzahl ist), daher können Sie dort tun, was Sie möchten.PHP, 82 Bytes
Nimmt eine Zahl und eine Ziffernfolge aus Befehlszeilenargumenten. Laufen Sie mit
-nr
.Nervenzusammenbruch
quelle
Java 7,
139141 Bytes+2 Bytes durch Unterstützung von Zahlen über 32-Bit (geändert
int
inlong
)Eingabeformat: Eine Ganzzahl (dh
4
) und eine Zeichenfolge (dh)"12"
)Erläuterung:
Testcode:
Probieren Sie es hier aus.
HINWEIS: Der zweite Testfall ist deaktiviert, da er sehr lange wiederholt wird.
Ausgabe:
quelle