Wyzwanie
Biorąc pod uwagę zestaw T
podzbiorów zbioru skończonego S={1,2,3,...,n}
, określ, czy T
jest to topologia, czy nie.
Wyjaśnienie
PowerSet P(S)
pewnego zbioru S
jest zbiorem wszystkich podzbiorów S
. Kilka przykładów:
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}}
Topologia T
na zestaw S
jest podzestawem P(S)
z następujących właściwości:
{}
jest wT
iS
jest wT
- Jeśli
A
iB
sąT
, to ich skrzyżowanieA ∩ B
- Jeśli
A
iB
są,T
to jest ich związekA ∪ B
*
* Ta definicja nie jest całkiem poprawna, ale jest prawdziwa dla zbiorów skończonych, co jest wystarczające do celów tego wyzwania. Rzeczywisty aksjomat pozwoliłby również na nieskończone związki, ale nie ma to znaczenia w przypadku skończonym.
Detale
- Możesz założyć, że
S = {1,2,...,n}
(lub alternatywnieS = {0,1,...,n}
) gdzien
jest największą liczbą całkowitą występującą w zestawachT
. - Format wejściowy jest elastyczny: możesz użyć ciągu znaków, listy list lub zestawu list lub dowolnego podobnego formatu obsługiwanego przez język. Możesz także użyć zestawów, takich jak
S = {0,1,...,n}
jeśli jest to wygodniejsze. - Dane wyjściowe muszą być zgodne z prawdą lub falsey.
- Możesz wziąć
n
(lub alternatywnien+1
lubn-1
) jako dodatkowy wkład. - Jeśli pracujesz z uporządkowanymi listami, możesz założyć, że liczby w zestawie są posortowane. Możesz również założyć, że lista ma określoną kolejność (np. Leksykograficzną).
- Ponieważ reprezentujemy zestawy, możesz założyć, że żadne dwa wpisy ich reprezentacji listy nie są sobie równe.
Przykłady
Topologie
{{}} 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}}
nie topologie
{{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
jest to zestaw, myślę, że rozsądnie jest założyć, że żaden podzbiór wejścia nie jest powtarzany (tj.{{}, {1,2}, {1,2}}
Nie jest prawidłowym wejściem). Czy potrafisz wyjaśnić to w wyzwaniu, twierdząco lub negatywnie?Odpowiedzi:
Python 2 ,
117999791 bajtówWypróbuj online!
Wyjście odbywa się za pomocą kodu wyjścia
źródło
Haskell ,
95 89 7478 bajtówWypróbuj online!
Wyjaśnienie:
źródło
[[],[2]]
? Jest to topologia, ale nie ponad domniemany („Możesz założyć, że ...”) zestaw.Mathematica,
87736663 bajtówPobiera
[T, n]
jako dane wejściowe.Wyjaśnienie
Funkcja zwracająca przecięcie i połączenie danych wejściowych
Zamapuj tę funkcję na liście wejść na poziomie 1.
Spłaszcz wynik (
Outer
część zwraca wiązkę zagnieżdżonychList
).Weź połączenie między spłaszczoną listą a
{{}, S}
. To usuwa duplikaty i dodaje{}
iS
do wynikowej listy.Sprawdź, czy lista z góry jest równa posortowanej wersji danych wejściowych.
źródło
MATL , 38 bajtów
Dane wejściowe to macierz binarna, w której każdy wiersz jest zbiorem, każda kolumna jest elementem, a każdy wpis wskazuje członkostwo. Na przykład
{{},{1},{1,2}}
jest wyrażony jako[0 0;1 0;1 1]
. Użyj połączonego programu Octave, aby przekonwertować na ten format.Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
źródło
Python 2 ,
92 71122 bajtów&
i|
stenogramy dla operacji ustawiania.set()
asi-i
Lambda, która pobiera listę zestawów jako dane wejściowe i zwraca True / false. Po prostu sprawdza, czy istnieje pusty zestaw, a połączenie i przecięcie każdego zestawu (dwa zestawy iterowane jako
i
ij
) istnieje na danej liście zestawów.Wypróbuj online!
źródło
input()
celuset()
w stopce.set()
przezi-i
lubi^i
CJam (23 bajty)
Zestaw testów online . To anonimowy blok (funkcja). Zakładam
S = {0,1,...,n}
; blok przyjmuje tablicę posortowanych tablic in+1
jako parametry i pozostawia0
lub1
na stosie. W przypadku,{{}}
gdy założono, że kod i środowisko testowen+1 = 0
.źródło
Pyth,
2423 bajtyZestaw testowy
Ten program przyjmuje dane jako uporządkowaną listę uporządkowanych list. Listy wewnętrzne muszą być w porządku rosnącym, a lista kolejności musi być posortowana według długości, a następnie leksykograficznie. Potwierdziłem, że jest to dozwolony format wejściowy. Liczby zaczynają się od 0, a N + 1 jest również traktowane jako dane wejściowe.
Jeśli chodzi o to, jak to działa, odfiltrowujemy wszystko, co nie jest w P (S), a następnie dodajemy S,
[]
przecięcie każdej pary i połączenie każdej pary, deduplikujemy i sprawdzamy, czy wynik jest równy wejściowi.źródło
Aksjomat, 358 bajtów
niepoddane golfowi i wyniki:
źródło