Reto
Dado un conjunto T
de subconjuntos de un conjunto finito S={1,2,3,...,n}
, determine si T
es una topología o no.
Explicación
El conjunto P(S)
de potencia de algún conjunto S
es el conjunto de todos los subconjuntos de S
. Algunos ejemplos:
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}}
Una topología T
en el conjunto S
es un subconjunto de P(S)
con las siguientes propiedades:
{}
está adentroT
yS
está adentroT
- Si
A
yB
están dentro,T
entonces también lo es su intersecciónA ∩ B
- Si
A
yB
están dentro,T
entonces también lo está su uniónA ∪ B
*
* Esta definición no es del todo correcta, pero es cierta para conjuntos finitos, lo cual es suficiente para los propósitos de este desafío. El axioma real también permitiría uniones infinitas, pero eso es irrelevante en el caso finito.
Detalles
- Puede suponer que
S = {1,2,...,n}
(o alternativamenteS = {0,1,...,n}
) donden
está el número entero más grande que aparece en los conjuntos deT
. - El formato de entrada es flexible: puede usar una cadena, una lista de listas o un conjunto de listas o cualquier formato similar que pueda manejar su idioma. También puede usar conjuntos como
S = {0,1,...,n}
si fuera más conveniente. - La salida debe ser truthey o falsey.
- Se le permite tomar
n
(o alternativamenten+1
on-1
) como entrada adicional. - Si trabaja con listas ordenadas, puede suponer que los números dentro de un conjunto están ordenados. También puede suponer que la lista tiene un cierto orden (por ejemplo, lexicográfico.
- Como representamos conjuntos, puede suponer que no hay dos entradas de su representación de lista iguales.
Ejemplos
Topologías
{{}} 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}}
no topologías
{{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 un conjunto, creo que es razonable suponer que no se repite ningún subconjunto en la entrada ({{}, {1,2}, {1,2}}
es decir, no es una entrada válida). ¿Puedes aclarar eso en el desafío, ya sea afirmativa o negativamente?Respuestas:
Python 2 ,
117999791 bytesPruébalo en línea!
La salida es a través del código de salida
fuente
Haskell ,
95 89 7478 bytesPruébalo en línea!
Explicación:
fuente
[[],[2]]
? Es una topología, pero no sobre el conjunto implícito ("Puede suponer que ...").Mathematica,
87736663 bytesToma
[T, n]
como entrada.Explicación
Función que devuelve la intersección y la unión de las entradas.
Asigna esa función a la lista de entrada en el nivel 1.
Acoplar el resultado (la
Outer
parte devuelve un montón deList
s anidados ).Tome la unión entre la lista aplanada y
{{}, S}
. Esto elimina duplicados y agrega{}
yS
a la lista resultante.Compruebe si la lista de arriba es igual a la versión ordenada de la entrada.
fuente
MATL , 38 bytes
La entrada es una matriz binaria donde cada fila es un conjunto, cada columna es un elemento y cada entrada indica membresía. Por ejemplo,
{{},{1},{1,2}}
se expresa como[0 0;1 0;1 1]
. Use el programa Octave vinculado para convertir a este formato.Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
fuente
Python 2 ,
92 71122 bytes&
y|
shorthands para las operaciones de configuración.set()
comoi-i
Lambda que toma una lista de conjuntos como entrada y devuelve Verdadero / falso. Simplemente comprueba si hay un conjunto vacío y la unión e intersección de cada conjunto (dos conjuntos iterados como
i
yj
) existe en la lista de conjuntos dada.Pruébalo en línea!
fuente
input()
aset()
en el pie de página.set()
coni-i
oi^i
CJam (23 bytes)
Conjunto de pruebas en línea . Este es un bloque anónimo (función). Asumo
S = {0,1,...,n}
; el bloque toma una matriz de matrices ordenadas yn+1
como parámetros y las deja0
o1
en la pila. En el caso,{{}}
el código y el marco de prueba asumen eson+1 = 0
.fuente
Pyth,
2423 bytesBanco de pruebas
Este programa toma la entrada como una lista ordenada de listas ordenadas. Las listas internas deben estar en orden ascendente y la lista de orden debe estar ordenada por longitud y luego lexicográficamente. He confirmado que este es un formato de entrada permitido. Los números comienzan en 0, y N + 1 también se toma como entrada.
En cuanto a cómo funciona, filtramos todo lo que no está en P (S), luego agregamos S,
[]
la intersección de cada par y la unión de cada par, deduplicamos y verificamos que el resultado sea igual a la entrada.fuente
Axioma, 358 bytes
sin golf y resultados:
fuente