{}
ist die leere Menge. Sie können verwenden ()
oder []
wenn Sie möchten.
Wir werden "set" nicht rigoros definieren, aber alle Sets erfüllen die folgenden Eigenschaften:
Mengen folgen der üblichen mathematischen Struktur. Hier sind einige wichtige Punkte:
- Sets werden nicht bestellt.
- Kein Satz enthält sich selbst.
- Elemente sind entweder in einer Menge oder nicht, dies ist boolesch. Daher können Mengenelemente keine Multiplizitäten haben (dh ein Element kann nicht mehrmals in einer Menge enthalten sein.)
- Elemente einer Menge sind ebenfalls Mengen und
{}
sind das einzige primitive Element.
Aufgabe
Schreiben Sie ein Programm / eine Funktion, die bestimmt, ob zwei Sätze gleich sind.
Eingang
Zwei gültige Mengen über stdin oder Funktionsargument. Das Eingabeformat ist im Rahmen der Vernunft locker.
Einige gültige Eingaben sind:
{} {{}}
{{},{{}}} {{{{{},{{}}}}}}
{{},{{},{{}}}} {{{},{{}}},{{{{{},{{}}}}}}}
Ungültige Eingaben:
{{} {} Brackets will always be balanced.
{{},{}} {} Set contains the same element twice
Ausgabe
Ein wahrer Wert, wenn die Eingaben gleich sind, andernfalls falsch.
Testfälle
Ihre Einreichung sollte für alle gültigen Eingaben korrekt sein, nicht nur für die Testfälle. Diese können jederzeit aktualisiert werden.
Wahrheit:
{} {}
{{},{{}}} {{{}},{}}
{{},{{},{{{}},{}}}} {{{{},{{}}},{}},{}}
Falsch:
{} {{}}
{{},{{},{{{}},{}}}} {{{{}}},{},{{}}}
{{},{{}},{{{}}},{{},{{}}}} {}
Wertung
Zusätzliche Regeln
Es wurde eine zusätzliche Regel hinzugefügt, die ungeordnete iterierbare Typen insgesamt verbietet. Sie sind zu häufig und trivialisieren diese Herausforderung viel zu sehr. Fühlen Sie sich frei, Antworten zu hinterlassen, die dies verletzen. Bitte geben Sie einfach an, dass sie vor der Regeländerung gemacht wurden.
==
in Julia, 2 Bytes,frozenset.__eq__
in Python 16 Bytes usw.).See the comments for an explanation.
Bitte tu das nicht. Kommentare sind flüchtig und verschwinden sehr leicht, so dass wichtige Sutff in denAntworten:
CJam, 11 Bytes
Probieren Sie es hier aus.
CJam, 13 Bytes
Probieren Sie es hier aus.
quelle
Gelee , 6 Bytes
Probieren Sie es online aus! oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
Brachylog , 8 Bytes
Dies erwartet Klammern in Eingabe und Ausgabe.
Beispielsweise:
Erläuterung
quelle
Pyth, 9 Bytes
Eingabeformat: Verwenden Sie
[]
anstelle von{}
.Testsuite
quelle
Mathematica, 16 Bytes
Eine unbenannte Funktion, die eine Liste erwartet, die beide Mengen enthält, z
Wir verwenden
//@
(MapAll
), um die Mengen auf jeder Ebene zu sortieren und dann zu behaupten, dass die Ergebnisse gleich sind.quelle
JavaScript (ES6), 42 Byte
Akzeptiert Eingaben mit
[]
s zf([[],[[]]],[[[]],[]])
. Konvertiert die Arrays in Strings und sortiert sie dann von innen nach außen.0
und1
werden verwendet , weil sie kürzer als'['
und']'
, so zum Beispielg([[[]],[]])
ist001,00111
die darstellt[[],[[]]]
.quelle
0+
da?0+
und+1
alles was ich bekommen würde sind Kommas.f=
, ich habe es nicht in die Anzahl der Bytes aufgenommen und ich bin zu faul, um den Beitrag nur dafür zu bearbeiten.Python 2, 49 Bytes
Beispiel: Aufruf der anonymen Funktion
g
:quelle
g([[],[[],[]],[[],[[]]],[[]],[[[]]]], [[[],[]],[[[]],[]],[[]],[[[]]],[]])
gibt zurückFalse
, aber die Mengen sind gleich. Dies sollte vor dem Sortieren durch Zuordnung behoben werden.Prolog (SWI) , 37 Bytes
Probieren Sie es online aus!
Nimmt Eingaben als verschachtelte Listen auf, dh mit eckigen Klammern anstelle von geschweiften Klammern. Ursprünglich war dies der
X+Y:-sort(X,M),sort(Y,N),maplist(+,M,N).
Fall, aber dann habe ich versucht, die Antwort von Fatalize auf Brachylog v1 zu übersetzen, und es stellte sich heraus, dass sie 3 Byte kürzer war.Es kann stattdessen geschweifte Klammern verarbeiten, für 23 weitere Bytes:
Prolog (SWI) , 60 Bytes
Probieren Sie es online aus!
*
Hier wird ein (nicht leerer, daher derX=Y;
) Klammerbegriff auf seiner rechten Seite in eine Liste der Elemente des Begriffs konvertiert und dann auf seiner linken Seite sortiert.Da beide Argumente bereits
+
durchlaufen werden*
, spart das Einfügen vonsort
in*
7 Bytes gegenüber der Verwendungpermutation
in+
.Und schließlich ist hier eine Version, die die Eingabelisten behandelt, die möglicherweise doppelte Elemente enthalten. Dies hat mich dazu inspiriert, zunächst eine Lösung in Prolog zu schreiben:
Prolog (SWI) , 57 Bytes
Probieren Sie es online aus!
X/Y
Erklärt im Wesentlichen, dass X eine Teilmenge von Y ist, indem deklariert wird, dass für jedes Element von X ein gleiches Element von Y vorhanden ist,X/Y,Y/X
und dass X und Y gleiche Mengen sind.quelle
APL (NARS2000), 4 Bytes
⍦
ist der Multiset-Operator, der Funktionen so ändert, dass ihre Argumente als Mengen anstelle von Listen behandelt werden≡
ist die Äquivalenzfunktion, die einen Booleschen Wert zurückgibt, der angibt, ob die Argumente in Wert und Form vollständig äquivalent sindZu der zusätzlichen Regel: Beachten Sie, dass diese Antwort keinen ungeordneten festgelegten Datentyp verwendet, sondern nur normale Listen (die mehrere identische Elemente enthalten können). Es behandelt nur sie nur als Sets.
Die Byteanzahl beträgt 4, da NARS2000 ausschließlich UCS-2 verwendet.
quelle
Julia,
363532 BytesDie Eingabe ist ein verschachteltes Array, entweder mit der (veralteten)
{}
Syntax oderAny[]
.Probieren Sie es online aus!
quelle
SETL, 1 Byte
Nimmt Sätze als linkes und rechtes Argument.
Beachten Sie, dass dies NICHT der hinzugefügten Regel entspricht, die ungeordnete festgelegte Datentypen verbietet.
quelle
Brachylog v2, 3 Bytes
Probieren Sie es online aus!
Nimmt einen Satz durch die Eingangsvariable und den anderen Satz durch die Ausgangsvariable. Erfolgreich, wenn die Sätze gleich sind, und fehlgeschlagen, wenn sie nicht gleich sind.
Wie meine Hauptantwort auf Prolog, eine Übersetzung von Fatalizes Brachylog v1-Antwort (auf die man meiner Meinung nach zurückgreifen könnte
p:0a
?).quelle
𝔼𝕊𝕄𝕚𝕟 7 Zeichen / 9 Bytes
Try it here (ES6 browsers only).
Erläuterung
quelle
Haskell, 77 Bytes
quelle
==
und<
nicht standardmäßig für Listen definiert?)S
als (eingewickelteL
) Liste vonS
es. Haskell hat keinen eingebauten Typ, der Listen von Listen von Listen von…Perl 6 , 55 Bytes
Nimmt Eingabe mit
[]
.Probieren Sie es online aus!
quelle
$^
stattdessen die Syntax zu verwenden, und ich denke nicht, dass die[]
Eingabe funktioniert, da alle[[]],[[[]]],[[[[]]]]
usw. zu[]
Wolfram-Sprache (Mathematica) , 20 Bytes
Probieren Sie es online aus!
Reine Funktion, die jeden Satz als Argument verwendet.
quelle