Werfen wir einen Satz von ganzen Zahlen nehmen mehr als 1 und nennen es X . Wir definieren S (i) als die Menge aller durch i teilbaren Elemente von X, wobei i> 1 ist . Möchte aus diesen Teilmengen eine Gruppe von Mengen auswählen, so dass
Ihre Vereinigung ist die Menge X
Kein Element von X befindet sich in zwei der Mengen.
Zum Beispiel können wir uns neu gruppieren {3..11}
als
{3,4,5,6,7,8,9,10,11}
S(3): {3, 6, 9, }
S(4): { 4, 8, }
S(5): { 5, 10, }
S(7): { 7, }
S(11):{ 11}
Einige Mengen können nicht auf diese Weise ausgedrückt werden. Zum Beispiel, wenn wir nehmen {3..12}
, 12
ist ein Vielfaches von 3 und 4, was verhindert, dass sich unsere Mengen gegenseitig ausschließen.
Einige Mengen können auf mehrere Arten ausgedrückt werden, zum Beispiel {4..8}
als
{4,5,6,7,8}
S(4): {4, 8}
S(5): { 5, }
S(6): { 6, }
S(7): { 7, }
es kann aber auch dargestellt werden als
{4,5,6,7,8}
S(2): {4, 6, 8}
S(5): { 5, }
S(7): { 7, }
Aufgabe
Unser Ziel ist es, ein Programm zu schreiben, das eine Menge als Eingabe verwendet und die kleinste Anzahl von Teilmengen ausgibt, die diese auf diese Weise abdecken. Wenn es keine gibt, sollten Sie einen anderen Wert als eine positive Ganzzahl ausgeben (zum Beispiel 0
).
Dies ist eine Code-Golf- Frage, daher werden die Antworten in Bytes bewertet, wobei weniger Bytes besser sind.
Tests
{3..11} -> 5
{4..8} -> 3
{22,24,26,30} -> 1
{5} -> 1
quelle
[5..5]
? Können wir Dinge wie erhalten[8..4]
?12
Ist ein Vielfaches von beidem3
und4
verhindert, dass sich unsere Sets gegenseitig ausschließen ": warum? Ich sehe in der Problemstellung nichts anderes, was es erfordert12
, in beide Teilmengen zu gehen.[22,24,26,30]
sind alle ein Vielfaches von2
. Sind Sie sicher, dass es nicht besser wäre, dies zu löschen und es mit einer Sandbox zu versehen?Antworten:
Python 2 , 167 Bytes
Probieren Sie es online!
-9 Bytes dank Zacharý
-4 Bytes dank Mr. Xcoder
-2 Bytes durch Verwenden von Listen anstelle von Mengen
-5 Bytes durch Verwenden von
a in [...]
anstattany([a == ...])
.-2 Bytes dank Mr. Xcoder
-8 Bytes durch Zusammenführen von Anweisungen
-5 Bytes dank Mr. Xcoder
-7 Bytes dank Mr. Xcoder / Zacharý
+7 Bytes zur Behebung des Fehlers
-1 Bytes dank Ovs
Hinweis
Dies ist für größere maximale Zahlen extrem langsam, da es in keiner Weise optimiert ist. es hat nicht innerhalb von 2 minuten auf herrn xcoders gerät für
[22, 24, 26, 30]
.quelle
Clingo , 51 Bytes
Demo
quelle
x(3..12).
(oder muss ich updaten?) Nicht zu erkennen . Übrigens, können Sie eine gute Einführung in Clingo vorschlagen?UNSATISFIABLE
in einem solchen Fall ausgegeben werden. Ich habe meistens den Potassco-Führer benutzt .Mathematica, 105 Bytes
Probieren Sie es online aus,
kopieren Sie den Code und fügen Sie ihn mit Strg + V ein,
fügen Sie die Eingabe am Ende des Codes ein,drücken Siedie
Umschalttaste und die Eingabetaste, um ihn auszuführen
Eingang
Nimmt eine Liste als Eingangsausgang
0, wenn keine vorhanden sind
quelle
Check
Haskell, 136 Bytes
Probieren Sie es online!
Wie es funktioniert
Nehmen Sie viel Zeit für
{22,24,26,30}
.quelle
Jelly,
3835343331282524232019 Bytes-5 Bytes dank Leaky Nun
Probieren Sie es online!
Ich denke, der dritte Testfall funktioniert, ist aber sehr langsam.
0
wird ausgegeben, wenn keine Lösungen vorliegen.Erklärung (könnte diese Erklärung falsch verstanden haben):
quelle
ṀḊŒPðḍ@þ@⁹Sḟ1ðÐḟḢL
ṀḊ
eigentlich ist das ein cooler Trick!Julia, 91 Bytes
quelle
[Text to display](link to website)