Desafio
Dado um conjunto T
de subconjuntos de um conjunto finito S={1,2,3,...,n}
, determine se T
é uma topologia ou não.
Explicação
O conjunto P(S)
de poderes de um conjunto S
é o conjunto de todos os subconjuntos de S
. Alguns exemplos:
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}}
Uma topologia T
no conjunto S
é um subconjunto P(S)
com as seguintes propriedades:
{}
está dentroT
eS
está dentroT
- Se
A
eB
estão,T
então é a sua interseçãoA ∩ B
- Se
A
eB
estão,T
então é a união delesA ∪ B
*
* Essa definição não é muito correta, mas é verdadeira para conjuntos finitos, o que é suficiente para os propósitos deste desafio. O axioma real também permitiria uniões infinitas, mas isso é irrelevante no caso finito.
Detalhes
- Você pode assumir que
S = {1,2,...,n}
(ou alternativamenteS = {0,1,...,n}
) onden
está o maior número inteiro que aparece nos conjuntos deT
. - O formato de entrada é flexível: você pode usar uma string, uma lista de listas ou um conjunto de listas ou qualquer formato semelhante que o seu idioma possa manipular. Você também pode usar conjuntos como
S = {0,1,...,n}
se for mais conveniente. - A saída deve ser verdade ou falsey.
- Você tem permissão para tomar
n
(ou alternativamenten+1
oun-1
) como uma entrada adicional. - Se você trabalha com listas ordenadas, pode assumir que os números em um conjunto são classificados. Você também pode assumir que a lista tem uma determinada ordem (por exemplo, lexicográfica.
- Como representamos conjuntos, você pode assumir que não há duas entradas de sua representação de lista iguais.
Exemplos
Topologias
{{}} 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}}
não-topologias
{{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
é um conjunto, acho razoável supor que nenhum subconjunto na entrada seja repetido (ou{{}, {1,2}, {1,2}}
seja, não é uma entrada válida). Você pode esclarecer isso no desafio, afirmativamente ou negativamente?Respostas:
Python 2 ,
117999791 bytesExperimente online!
A saída é via código de saída
fonte
Haskell ,
95 89 7478 bytesExperimente online!
Explicação:
fonte
[[],[2]]
? É uma topologia, mas não sobre o conjunto implícito ("Você pode assumir que ...").Mathematica,
87736663 bytesToma
[T, n]
como entrada.Explicação
Função que retorna a interseção e a união das entradas
Mapeie essa função para a lista de entrada no nível 1.
Achate o resultado (a
Outer
peça retorna um monte deList
s aninhados ).Tome a união entre a lista achatada e
{{}, S}
. Isso remove duplicatas e adiciona{}
eS
à lista resultante.Verifique se a lista acima é igual à versão classificada da entrada.
fonte
MATL , 38 bytes
Entrada é uma matriz binária em que cada linha é um conjunto, cada coluna é um elemento e cada entrada indica associação. Por exemplo,
{{},{1},{1,2}}
é expresso como[0 0;1 0;1 1]
. Use o programa Octave vinculado para converter para esse formato.Experimente online! Ou verifique todos os casos de teste .
Explicação
fonte
Python 2 ,
92 71122 bytes&
e|
atalhos para operações definidas.set()
asi-i
Lambda que recebe uma lista de conjuntos como entrada e retorna True / false. Simplesmente verifica se existe um conjunto vazio e a união e interseção de cada conjunto (dois conjuntos iterados como
i
ej
) existem na lista de conjuntos fornecida.Experimente online!
fonte
input()
paraset()
no rodapé.set()
pori-i
oui^i
CJam (23 bytes)
Conjunto de testes online . Este é um bloco anônimo (função). Eu presumo
S = {0,1,...,n}
; o bloco pega uma matriz de matrizes ordenadas en+1
como parâmetros e folhas0
ou1
na pilha. No caso,{{}}
o código e a estrutura de teste assumem isson+1 = 0
.fonte
Pitão,
2423 bytesSuíte de teste
Este programa recebe a entrada como uma lista ordenada de listas ordenadas. As listas internas devem estar em ordem crescente e a lista de ordens deve ser classificada por comprimento e, em seguida, lexicograficamente. Confirmei que este é um formato de entrada permitido. Os números começam em 0 e N + 1 também é usado como entrada.
Quanto à forma como funciona, filtramos qualquer coisa que não esteja em P (S), em seguida adicionamos S,
[]
a interseção de cada par e a união de cada par, deduplicada e verificamos que o resultado é igual à entrada.fonte
Axioma, 358 bytes
ungolfed e resultados:
fonte