Défi
Étant donné un ensemble T
de sous-ensembles d'un ensemble fini S={1,2,3,...,n}
, déterminez s'il T
s'agit d'une topologie ou non.
Explication
Le jeu P(S)
de puissance d'un ensemble S
est l'ensemble de tous les sous-ensembles de S
. Quelques exemples:
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}}
Une topologie T
sur l'ensemble S
est un sous-ensemble P(S)
avec les propriétés suivantes:
{}
estT
etS
estT
- Si
A
etB
sontT
dedans, leur intersection l'est aussiA ∩ B
- Si
A
etB
sontT
là, leur union l'est aussiA ∪ B
*
* Cette définition n'est pas tout à fait correcte, mais elle est vraie pour les ensembles finis, ce qui est suffisant pour les besoins de ce défi. L'axiome réel permettrait également des unions infinies, mais cela n'est pas pertinent dans le cas fini.
Détails
- Vous pouvez supposer que
S = {1,2,...,n}
(ou alternativementS = {0,1,...,n}
) oùn
est le plus grand entier qui apparaît dans les ensembles deT
. - Le format d'entrée est flexible: vous pouvez utiliser une chaîne, une liste de listes ou un ensemble de listes ou tout autre format similaire que votre langage peut gérer. Vous pouvez également utiliser des ensembles comme
S = {0,1,...,n}
si c'était plus pratique. - La sortie doit être vraie ou falsey.
- Vous êtes autorisé à prendre
n
(ou alternativementn+1
oun-1
) comme entrée supplémentaire. - Si vous travaillez avec des listes ordonnées, vous pouvez supposer que les numéros d'un ensemble sont triés. Vous pouvez également supposer que la liste a un certain ordre (par exemple lexicographique.
- Comme nous représentons des ensembles, vous pouvez supposer que deux entrées de leur représentation de liste ne sont pas égales.
Exemples
Topologies
{{}} 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}}
non topologies
{{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
s'agit d'un ensemble, je pense qu'il est raisonnable de supposer qu'aucun sous-ensemble de l'entrée n'est répété (c'est{{}, {1,2}, {1,2}}
-à- dire qu'il ne s'agit pas d'une entrée valide). Pouvez-vous clarifier cela dans le défi, soit affirmativement, soit négativement?Réponses:
Python 2 ,
117999791 octetsEssayez-le en ligne!
La sortie se fait via le code de sortie
la source
Haskell ,
95 89 7478 octetsEssayez-le en ligne!
Explication:
la source
[[],[2]]
? C'est une topologie, mais pas sur l'ensemble implicite ("Vous pouvez supposer que ...").Mathematica,
87736663 octetsPrend
[T, n]
en entrée.Explication
Fonction qui renvoie l'intersection et l'union des entrées
Mappez cette fonction sur la liste d'entrée au niveau 1.
Aplatissez le résultat (la
Outer
pièce renvoie un tas deList
s imbriqués ).Prenez l'union entre la liste aplatie et
{{}, S}
. Cela supprime les doublons et ajoute{}
etS
à la liste résultante.Vérifiez si la liste ci-dessus est égale à la version triée de l'entrée.
la source
MATL , 38 octets
L'entrée est une matrice binaire où chaque ligne est un ensemble, chaque colonne est un élément et chaque entrée indique l'appartenance. Par exemple,
{{},{1},{1,2}}
est exprimé comme[0 0;1 0;1 1]
. Utilisez le programme Octave lié pour convertir à ce format.Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
la source
Python 2 ,
92 71122 octets&
et des|
raccourcis pour les opérations de set.set()
asi-i
Lambda qui prend une liste d'ensembles en entrée et renvoie True / false. Vérifie simplement s'il y a un ensemble vide et l'union et l'intersection de chaque ensemble (deux ensembles itérés comme
i
etj
) existe dans la liste d'ensembles donnée.Essayez-le en ligne!
la source
input()
enset()
en pied de page.set()
pari-i
oui^i
CJam (23 octets)
Suite de tests en ligne . Il s'agit d'un bloc anonyme (fonction). Je suppose
S = {0,1,...,n}
; le bloc prend un tableau de tableaux triés etn+1
comme paramètres et quitte0
ou1
sur la pile. Dans le cas où{{}}
le code et le framework de test le supposentn+1 = 0
.la source
Pyth,
2423 octetsSuite de tests
Ce programme prend l'entrée comme une liste ordonnée de listes ordonnées. Les listes internes doivent être en ordre croissant et la liste d'ordre doit être triée par longueur puis lexicographiquement. J'ai confirmé qu'il s'agit d'un format d'entrée autorisé. Les nombres commencent à 0 et N + 1 est également pris en entrée.
Quant à la façon dont cela fonctionne, nous filtrons tout ce qui n'est pas dans P (S), puis ajoutons S,
[]
l'intersection de chaque paire et l'union de chaque paire, dédupliquons et vérifions que le résultat est égal à l'entrée.la source
Axiome, 358 octets
non golfé et résultats:
la source