{}
jest pustym zestawem. Możesz użyć ()
lub []
jeśli chcesz.
Nie zamierzamy rygorystycznie definiować „zestawu”, ale wszystkie zestawy spełniają następujące właściwości:
Zestawy mają zwykłą strukturę matematyczną. Oto kilka ważnych punktów:
- Zestawy nie są zamawiane.
- Żaden zestaw nie zawiera siebie.
- Elementy są albo w zestawie, albo nie, to jest wartość logiczna. Dlatego ustawione elementy nie mogą mieć wielokrotności (tzn. Element nie może znajdować się w zestawie wiele razy).
- Elementy zestawu są również zestawami i
{}
jest jedynym prymitywnym elementem.
Zadanie
Napisz program / funkcję, która określa, czy dwa zestawy są równe.
Wejście
Dwa prawidłowe zestawy za pomocą argumentu stdin lub funkcji. Format wejściowy jest luźny w granicach rozsądku.
Niektóre prawidłowe dane wejściowe to:
{} {{}}
{{},{{}}} {{{{{},{{}}}}}}
{{},{{},{{}}}} {{{},{{}}},{{{{{},{{}}}}}}}
Nieprawidłowe dane wejściowe:
{{} {} Brackets will always be balanced.
{{},{}} {} Set contains the same element twice
Wynik
Prawdziwa wartość, jeśli dane wejściowe są równe, w przeciwnym razie fałsz.
Przypadki testowe
Twoje zgłoszenie powinno poprawnie odpowiedzieć na wszystkie prawidłowe dane wejściowe, nie tylko na przypadki testowe. Mogą one być aktualizowane w dowolnym momencie.
Prawda:
{} {}
{{},{{}}} {{{}},{}}
{{},{{},{{{}},{}}}} {{{{},{{}}},{}},{}}
Falsy:
{} {{}}
{{},{{},{{{}},{}}}} {{{{}}},{},{{}}}
{{},{{}},{{{}}},{{},{{}}}} {}
Punktacja
Dodatkowe zasady
Dodano dodatkową regułę całkowicie zakazującą nieuporządkowanych typów iteracyjnych. Są zbyt powszechne i zbyt trywializują to wyzwanie. Możesz zostawić odpowiedzi, które naruszają to miejsce, po prostu zaznacz, że zostały udzielone przed zmianą reguły.
==
w Julia, 2 bajty;frozenset.__eq__
w Pythonie 16 bajtów; itp.).See the comments for an explanation.
Proszę nie rób tego. Komentarze są niestabilne i odchodzą bardzo łatwo, więc ważny sutff trafia do treści postuOdpowiedzi:
CJam, 11 bajtów
Wypróbuj tutaj.
CJam, 13 bajtów
Wypróbuj tutaj.
źródło
Galaretka , 6 bajtów
Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
Brachylog , 8 bajtów
To oczekuje nawiasów wejściowych i wyjściowych.
Na przykład:
Wyjaśnienie
źródło
Pyth, 9 bajtów
Format wejściowy: użyj
[]
zamiast{}
.Zestaw testowy
źródło
Mathematica, 16 bajtów
Nienazwana funkcja, która oczekuje listy zawierającej oba zestawy, np
Używamy
//@
(MapAll
) do sortowania zestawów na każdym poziomie, a następnie stwierdzamy, że wyniki są równe.źródło
JavaScript (ES6), 42 bajty
Akceptuje wprowadzanie za pomocą
[]
s, npf([[],[[]]],[[[]],[]])
. Działa poprzez konwersję tablic na ciągi, a następnie sortowanie ich od wewnątrz.0
i1
są używane, ponieważ są krótsze niż'['
i']'
, więc na przykładg([[[]],[]])
to,001,00111
co reprezentuje[[],[[]]]
.źródło
0+
tam jest?0+
i+1
wszystko, co dostanę, to przecinki.f=
, nie uwzględniłem go w liczbie bajtów i jestem zbyt leniwy, aby edytować post tylko w tym celu.Python 2, 49 bajtów
Na przykład wywołanie funkcji anonimowej
g
:źródło
g([[],[[],[]],[[],[[]]],[[]],[[[]]]], [[[],[]],[[[]],[]],[[]],[[[]]],[]])
zwracaFalse
, ale zestawy są równe. Należy to naprawić poprzez mapowanie przed sortowaniem.Prolog (SWI) , 37 bajtów
Wypróbuj online!
Pobiera dane wejściowe jako listy zagnieżdżone, tj. W nawiasach kwadratowych zamiast nawiasów klamrowych. Początkowo tak było
X+Y:-sort(X,M),sort(Y,N),maplist(+,M,N).
, ale potem spróbowałem przetłumaczyć odpowiedź Fatach's Brachylog v1 i okazało się, że 3 bajty krócej.W rzeczywistości może obsługiwać nawiasy klamrowe, dla 23 kolejnych bajtów:
Prolog (SWI) , 60 bajtów
Wypróbuj online!
*
tutaj konwertuje (niepusty, stądX=Y;
) nawias klamrowy po prawej stronie na listę elementów tego terminu, a następnie sortuje go na lewą stronę.Ponieważ oba argumenty
+
są*
już przetwarzane, wstawieniesort
in*
pozwala zaoszczędzić 7 bajtów przed użyciempermutation
in+
.I wreszcie, oto wersja, która obsługuje listy wejściowe, które mogą mieć zduplikowane elementy, co zainspirowało mnie do napisania rozwiązania w Prologu na początek:
Prolog (SWI) , 57 bajtów
Wypróbuj online!
Zasadniczo
X/Y
deklaruje, że X jest podzbiorem Y, deklarując, że dla każdego elementu X istnieje równy element Y, więcX/Y,Y/X
deklaruje, że X i Y są równymi zbiorami.źródło
APL (NARS2000), 4 bajty
⍦
jest operatorem multisetowym, który modyfikuje funkcje, aby traktować swoje argumenty jako zestawy zamiast list,≡
jest funkcją równoważności, która zwraca wartość logiczną wskazującą, czy argumenty są całkowicie równoważne pod względem wartości i kształtuOdnośnie dodatkowej reguły: Zauważ, że ta odpowiedź nie używa żadnego nieuporządkowanego zestawu danych, a jedynie zwykłe listy (które mogą zawierać wiele identycznych elementów). Po prostu traktuje je jak zestawy.
Liczba bajtów wynosi 4, ponieważ NARS2000 używa wyłącznie UCS-2.
źródło
Julia,
363532 bajtyDane wejściowe to zagnieżdżona tablica albo (nieaktualna)
{}
składnia, alboAny[]
.Wypróbuj online!
źródło
SETL, 1 bajt
Przyjmuje zestawy jako lewy i prawy argument.
Zauważ, że NIE przestrzega to dodanej reguły, która zabrania nieuporządkowanego zestawu danych.
źródło
Brachylog v2, 3 bajty
Wypróbuj online!
Pobiera jeden zestaw przez zmienną wejściową, a drugi przez zmienną wyjściową. Udaje się, jeśli zestawy są równe, a kończy się niepowodzeniem, jeśli nie są.
Podobnie jak moja główna odpowiedź Prologa, tłumaczenie odpowiedzi Fatach's Brachylog v1 (do której, jak sądzę, można się pograć w golfa
p:0a
?).źródło
𝔼𝕊𝕄𝕚𝕟, 7 znaków / 9 bajtów
Try it here (ES6 browsers only).
Wyjaśnienie
źródło
Haskell, 77 bajtów
źródło
==
i<
nie są domyślnie zdefiniowane dla list?)S
jako (zawiniętąL
) listęS
es. Haskell nie ma wbudowanego typu, który mógłby reprezentować listy list list…Perl 6 , 55 bajtów
Przyjmuje dane za pomocą
[]
.Wypróbuj online!
źródło
$^
zamiast tego używa się krótszej składni, i nie sądzę, aby[]
dane wejściowe działały, ponieważ wszystkie[[]],[[[]]],[[[[]]]]
itp. Oceniają na[]
Wolfram Language (Mathematica) , 20 bajtów
Wypróbuj online!
Czysta funkcja, która bierze każdy zestaw jako argument.
źródło