(Zufällig inspiriert von /mathpro//q/339890 )
(Verwandte: 1 , 2 )
Bei einer Eingabeliste mit unterschiedlichen Primzahlen (z. B. [2, 5, 7]
) und einer Ganzzahl n
werden alle positiven Ganzzahlen ausgegeben, die strikt kleiner sind als diese n
, und nur diese Primzahlen als Teiler enthalten. Für die Eingabe [2, 5, 7]
und n=15
das bedeutet eine Ausgabe von [2, 4, 5, 7, 8, 10, 14]
.
Weitere Beispiele
[list] n | output
[2, 5, 7] 15 | [2, 4, 5, 7, 8, 10, 14]
[2, 5, 7] 14 | [2, 4, 5, 7, 8, 10]
[2] 3 | [2]
[2] 9 | [2, 4, 8]
[103, 101, 97] 10000 | [97, 101, 103, 9409, 9797, 9991]
[97, 101, 103] 104 | [97, 101, 103]
Regeln und Erläuterungen
- Die Eingabeliste ist garantiert nicht leer, sondern kann nur ein einzelnes Element sein
- Sie können davon ausgehen, dass die Eingabeliste auf die am besten geeignete Weise vorsortiert ist
n
ist immer größer als das größte Element in der Eingabeliste- Da können Sie zB
2**0 = 1
optional1
in Ihre Ausgabeliste aufnehmen - Die Ein- und Ausgabe kann auf jede bequeme Weise erfolgen
- Sie können das Ergebnis an STDOUT drucken oder als Funktionsergebnis zurückgeben
- Es ist entweder ein vollständiges Programm oder eine Funktion zulässig
- Falls zutreffend, können Sie davon ausgehen, dass die Eingabe- / Ausgabe-Ganzzahlen in den systemeigenen
int
Bereich Ihrer Sprache passen - Standardlücken sind verboten
- Dies ist Codegolf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt
1
die Ausgabe zuzulassen .[2, 3, 7]
, können Sie sie nicht verwenden5
.Antworten:
Stax , 6 Bytes
Führen Sie es aus und debuggen Sie es unter staxlang.xyz!
Entpackt (7 Bytes) und Erklärung:
quelle
05AB1E , 6 Bytes
Übernimmt die Ganzzahl als erste Eingabe, listet als zweite auf. Schließt das wahlweise freigestellte
1
in die Ausgabe ein.Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
Zwei 6- Byte- Alternativen von @Grimy :
Probieren Sie es online aus.
Dieser ist sehr langsam (der
[2,5,7], 15
Testfall läuft bereits ab), aber weniger wie die beiden anderen Ansätze:Im Gegensatz zu den beiden anderen Programmen oben wird die Liste als erste Eingabe und die Ganzzahl als zweite Eingabe verwendet. Es enthält jedoch auch das optionale Element
1
in der Ausgabe.Probieren Sie es online aus.
quelle
sиPѦʒ›
. Ich dachte , ich 6 hatte, aber es scheint nicht eine Möglichkeit , zusammen zu sein mits
/I
/¹
4747561509943000000000000000
. ;)GNfåP–
JavaScript (ES6),
64 ... 5250 BytesNimmt Eingaben als
(n)(primes)
wobei Primzahlen eine Menge sind. Ausgänge durch Ändern des Sets.Probieren Sie es online!
Kommentiert
quelle
Python 3 ,
6865 BytesProbieren Sie es online!
-3 Bytes dank @xnor
Die Funktion verwendet eine Primsequenz und eine Ganzzahl n als Eingaben. Die Ausgabe ist eine Liste, die 1 enthält.
Ungolfed:
Probieren Sie es online!
quelle
c*s<n*s
. Bearbeiten:n//c*s
ist kürzer.Haskell , 51 Bytes
x
p
mapM((<$>[0..n]).(^))p
product
n
p
Probieren Sie es online!
quelle
Haskell , 39 Bytes
Probieren Sie es online!
Prüft, ob
k
nur durch Primzahlen teilbar ist, indem geprüftl
wird, ob dasl
auf eine hohe Potenz gebrachte Produkt durch geteilt werden kannk
.quelle
Python 2 , 65 Bytes
Probieren Sie es online!
Prüft, ob
k
nur durch Primzahlen teilbar ist, indem geprüftl
wird, ob dasl
auf eine hohe Potenz gebrachte Produkt durch geteilt werden kannk
.Wenn
l
als eine Liste von Strings genommen werdeneval("*".join(l))
spart 3 Bytes überreduce(int.__mul__,l)
und kann in Python 3 verwendet werden , die fehltreduce
.Python 3 , 64 Bytes
Probieren Sie es online!
Eine Funktion die in umgekehrter Reihenfolge druckt und mit Fehler beendet.
Die unten stehende rekursive Lösung wäre kürzer, wenn sie
n
selbst in die Liste aufgenommen würde. Ich habe auch versucht, das Produkt rekursiv zu berechnenl
, aber das war länger.62 Bytes (nicht funktionsfähig)
Probieren Sie es online!
quelle
Gaia , 10 Bytes
Probieren Sie es online!
Ich habe noch nie
‡
mit einer Monade gearbeitet, sie ist sehr hilfreich für die Stapelmanipulation.quelle
J , 24 Bytes
Probieren Sie es online!
quelle
Gelee , 7 Bytes
Probieren Sie es online!
Eine dyadische Verknüpfung, bei der die exklusive obere Schranke als linkes Argument und die Liste der Primzahlen als rechtes Argument verwendet wird. Gibt eine Liste zurück, die 1 sowie die Zahlen enthält, die nur aus den angegebenen Primzahlen bestehen.
Eine Alternative wäre 7
ṖÆfḟ¥Ðḟ
quelle
Python 2 , 98 Bytes
Probieren Sie es online!
quelle
Japt
-f
,118 BytesVersuch es
quelle
Japt
-f
, 7 BytesVersuch es
quelle
1
in der Ausgabe, was es nicht sollte. Ich habe auch mitk e!øV
für meine Lösung begonnen, benötigte aber die 2 zusätzlichen Bytes, um0
& zu filtern1
.Since, e.g., 2**0 = 1, you can optionally include 1 in your output list
Ruby
-rprime
, 61 BytesProbieren Sie es online!
quelle
Retina 0.8.2 , 64 Bytes
Probieren Sie es online! Die Liste enthält kleinere Testfälle (
10000
Timeout wegen der langen Zeichenfolgen). Nimmt Eingaben in die Reihenfolge vorn f1 f2 f3...
(Faktoren müssen nicht prim sein, müssen aber coprime sein). Ausgabe enthält1
. Erläuterung:In Unary konvertieren.
Generieren Sie eine Liste von 0 bis
n-1
, sowohl dezimal als auch unär.Teilen Sie das Unäre wiederholt durch alle verfügbaren Faktoren.
Geben Sie die Dezimalzahlen aus, auf die die unäre Zahl reduziert wurde
1
.quelle
Pyth , 10 Bytes
Probieren Sie es online!
Übernimmt die Eingabe als
[[primes...], n]
quelle
Perl 6 , 27 Bytes
Probieren Sie es online!
Port von xnors Haskell-Lösung. Gibt auch 1 aus.
quelle
Holzkohle ,
22 bis20 BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. Zu langsam für den größeren Testfall. Erläuterung:
Vorherige schnellere 22-Byte-Antwort:
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Ausgabe enthält
1
. Erläuterung:Drücken Sie
1
auf die vordefinierte leere Liste.Durchlaufen Sie die Liste einschließlich aller Elemente, die während der Schleife an sie gesendet wurden.
Multiplizieren Sie den aktuellen Gegenstand mit jedem Prim und ziehen Sie die Schleife über die Produkte.
Überprüfen Sie, ob das Produkt ein neuer Wert ist.
Wenn ja, dann schieben Sie es auf die Liste.
Liste drucken.
quelle
C (clang) , 115 Bytes
Probieren Sie es online!
Ein Sieb auf Eratosthenes-Basis.
(Enthält 1 in der Ausgabe)
Dank @ceilingcat Vorschlag: printf (x [i] + "\ 0% d", i ++) anstelle von x [i] && printf ("% d", i), i ++ Ich nehme an, es verschiebt den Zeiger des Literales, aber nicht Keine Dokumentation gefunden, wenn mir jemand einen Einblick geben kann, wäre es willkommen.
quelle
x[i]==1
dann ist die Zeichenfolge"%d "
. Wennx[i]==0
dann ist die Zeichenfolge""
. C-Zeichenfolgen werden mit Null beendet, sodass ein explizites Nullzeichen die Zeichenfolge beendet. Dieser Hack missbraucht auch einige undefinierte Verhaltensweisen in Bezug auf dasi++
.