Herausforderung
Bestimmen Sie anhand einer Menge T
von Teilmengen einer endlichen Menge S={1,2,3,...,n}
, ob T
es sich um eine Topologie handelt oder nicht.
Erläuterung
Die Potenzmenge P(S)
einer Menge S
ist die Menge aller Teilmengen von S
. Einige Beispiele:
S = {}, P(S) = {{}}
S = {1}, P(S) = {{}, {1}}
S = {1,2}, P(S) = {{}, {1}, {2}, {1,2}}
S = {1,2,3}, P(S) = {{}, {1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3}}
Eine Topologie T
in der Gruppe S
ist eine Teilmenge P(S)
mit folgenden Eigenschaften:
{}
ist inT
undS
ist inT
- Wenn
A
undB
sindT
dann so ist ihre KreuzungA ∩ B
- Wenn
A
undB
sind inT
dann so ist ihre VereinigungA ∪ B
*
* Diese Definition ist nicht ganz korrekt, aber sie gilt für endliche Mengen, was für die Zwecke dieser Herausforderung ausreicht. Das eigentliche Axiom würde auch unendliche Vereinigungen zulassen, aber das ist im endlichen Fall irrelevant.
Einzelheiten
- Sie können davon ausgehen, dass
S = {1,2,...,n}
(oder alternativS = {0,1,...,n}
) won
die größte Ganzzahl ist, die in den Mengen von erscheintT
. - Das Eingabeformat ist flexibel: Sie können eine Zeichenfolge, eine Liste von Listen oder einen Satz von Listen oder ein ähnliches Format verwenden, das Ihre Sprache verarbeiten kann. Sie können auch Sätze wie verwenden,
S = {0,1,...,n}
wenn es bequemer ist. - Die Ausgabe muss wahr oder falsch sein.
- Sie dürfen
n
(oder alternativn+1
odern-1
) als zusätzliche Eingabe nehmen. - Wenn Sie mit geordneten Listen arbeiten, können Sie davon ausgehen, dass die Nummern innerhalb eines Sets sortiert sind. Sie können auch davon ausgehen, dass die Liste eine bestimmte Reihenfolge hat (z. B. lexikografisch).
- Da wir Mengen darstellen, können Sie davon ausgehen, dass keine zwei Einträge ihrer Listendarstellung gleich sind.
Beispiele
Topologien
{{}} over {}
{{},{1}} over {1}
P(S) over S (see in the explanation)
{{},{1},{1,2}} over {1,2}
{{},{1},{2,3},{1,2,3}} over {1,2,3}
{{1}, {1,2,3}, {1,4,5,6}, {1,2,3,4,5,6}, {}, {2,3}, {4,5,6}, {2,3,4,5,6}}
{{}, {1}, {2,3}, {2}, {4,5,6}, {5,6}, {5}, {2,5,6}, {2,5}, {1,5}, {1,2,3,4,5,6}, {1,2,3}, {1,2}, {1,4,5,6}, {1,5,6}, {1,2,5,6}, {2,3,4,5,6}, {2,3,5,6}, {2,3,5}, {1,2,3,5}, {2,4,5,6}, {1,2,5}, {1,2,3,5,6}, {1,2,4,5,6}}
{{}, {1}, {1,2}, {1,2,3}, {1,2,3,4}, {1,2,3,4,5}, {1,2,3,4,5,6}, {1,2,3,4,5,6,7}, {1,2,3,4,5,6,7,8}, {1,2,3,4,5,6,7,8,9}}
{{}, {1}, {1,2,3}, {1,2,3,4,5}, {1,2,3,4,5,6,7}, {1,2,3,4,5,6,7,8,9}}
Nicht-Topologien
{{1}} because {} is not contained
{{},{2}} because {1,2} is not contained
{{},{1,2},{2,3}} because the union {1,2,3} is not contained
{{},{1},{1,2},{2,3},{1,2,3}} because the intersection of {1,2} and {2,3} is not contained
{{},{1},{2},{3},{1,2},{2,3},{1,2,3}} because the union of {1} and {3} is not contained
{{}, {1}, {2,3}, {2}, {4,5,6}, {5,6}, {5}, {2,5,6}, {2,5}, {1,5}, {1,2,3,4,5,6}, {1,2,3}, {1,2}, {1,4,5,6}, {1,5,6}, {1,2,5,6}, {2,3,4,5,6}, {2,3,5,6}, {2,3,5}, {2,4,5,6}, {1,2,5}, {1,2,3,5,6}, {1,2,4,5,6}} because {1,2,3,5} is missing
{{}, {1}, {2}, {1,2,3}, {1,2,3,4,5}, {1,2,3,4,5,6,7}, {1,2,3,4,5,6,7,8,9}} because {1,2} is missing
T
es sich um eine Menge handelt, ist es meines Erachtens vernünftig anzunehmen, dass keine Teilmenge in der Eingabe wiederholt wird (dh{{}, {1,2}, {1,2}}
keine gültige Eingabe ist). Können Sie das in der Herausforderung klarstellen, entweder positiv oder negativ?Antworten:
Python 2 ,
117999791 BytesProbieren Sie es online!
Die Ausgabe erfolgt über den Exit-Code
quelle
Haskell ,
95 89 7478 BytesProbieren Sie es online!
Erläuterung:
quelle
[[],[2]]
? Es ist eine Topologie, aber nicht über den implizierten ("Sie können davon ausgehen, dass ...") Satz.Mathematica,
87736663 BytesNimmt
[T, n]
als Eingabe.Erläuterung
Funktion, die den Schnittpunkt und die Vereinigung der Eingaben zurückgibt
Ordnen Sie diese Funktion der Eingabeliste auf Ebene 1 zu.
Reduzieren Sie das Ergebnis (der
Outer
Teil gibt eine Reihe verschachtelterList
s zurück).Nehmen Sie die Vereinigung zwischen der abgeflachten Liste und
{{}, S}
. Dadurch werden Duplikate entfernt{}
undS
der resultierenden Liste hinzugefügt.Überprüfen Sie, ob die Liste von oben mit der sortierten Version der Eingabe übereinstimmt.
quelle
MATL , 38 Bytes
Die Eingabe ist eine binäre Matrix, in der jede Zeile eine Menge ist, jede Spalte ein Element ist und jeder Eintrag die Zugehörigkeit angibt. Zum Beispiel
{{},{1},{1,2}}
wird ausgedrückt als[0 0;1 0;1 1]
. Verwenden Sie das verknüpfte Octave-Programm , um in dieses Format zu konvertieren.Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
Erläuterung
quelle
Python 2 ,
92 71122 Bytes&
und an die|
Kürzel für Set-Operationen.set()
asi-i
Lambda, das eine Liste von Mengen als Eingabe verwendet und True / False zurückgibt. Überprüft einfach, ob es eine leere Menge gibt und ob die Vereinigung und der Schnittpunkt jeder Menge (zwei Mengen, die als
i
und iteriert werdenj
) in der angegebenen Liste der Mengen vorhanden sind.Probieren Sie es online!
quelle
input()
toset()
in der Fußzeile.set()
miti-i
oderi^i
CJam (23 Bytes)
Online-Testsuite . Dies ist ein anonymer Block (Funktion). Ich nehme an
S = {0,1,...,n}
; Der Block nimmt ein Array von sortierten Arrays undn+1
als Parameter und verlässt0
oder1
auf dem Stapel. In dem Fall gehen{{}}
der Code und das Test-Framework davon ausn+1 = 0
.quelle
Pyth,
2423 BytesTestsuite
Dieses Programm nimmt Eingaben als geordnete Liste von geordneten Listen entgegen. Die inneren Listen müssen in aufsteigender Reihenfolge sein und die Ordnungsliste muss nach Länge und dann lexikographisch sortiert sein. Ich habe bestätigt, dass dies ein zulässiges Eingabeformat ist. Zahlen beginnen bei 0 und N + 1 wird ebenfalls als Eingabe verwendet.
Wie es funktioniert, filtern wir alles heraus, was nicht in P (S) steht, und addieren dann S,
[]
den Schnittpunkt jedes Paares und die Vereinigung jedes Paares, deduplizieren und prüfen, ob das Ergebnis mit der Eingabe übereinstimmt.quelle
Axiom, 358 Bytes
ungolfed und ergebnisse:
quelle