Reto
Dado un conjunto Tde subconjuntos de un conjunto finito S={1,2,3,...,n}, determine si Tes una topología o no.
Explicación
El conjunto P(S) de potencia de algún conjunto Ses 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 Ses un subconjunto de P(S)con las siguientes propiedades:
{}está adentroTySestá adentroT- Si
AyBestán dentro,Tentonces también lo es su intersecciónA ∩ B - Si
AyBestán dentro,Tentonces 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}) dondenestá 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+1on-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

Tes 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
Outerparte devuelve un montón deLists anidados ).Tome la unión entre la lista aplanada y
{{}, S}. Esto elimina duplicados y agrega{}ySa 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-iLambda 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
iyj) existe en la lista de conjuntos dada.Pruébalo en línea!
fuente
input()aset()en el pie de página.set()coni-ioi^iCJam (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+1como parámetros y las deja0o1en 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