Menu
Coddy logo textTech

Subconjunto y superconjunto

Parte de la sección Lógica y Flujo del Journey de Swift de Coddy — lección 21 de 56.

Más allá de combinar conjuntos, también puedes compararlos.

isSubset(of:) responde "¿están todos y cada uno de mis elementos también en el otro conjunto?"

let small: Set = [1, 2]
let big:   Set = [1, 2, 3, 4]
small.isSubset(of: big)            // true
big.isSubset(of: small)            // false

isSuperset(of:) es lo inverso, "¿contengo todos los elementos del otro conjunto?":

big.isSuperset(of: small)          // true

isDisjoint(with:) devuelve true cuando los dos conjuntos no comparten ningún elemento en absoluto:

let evens: Set = [2, 4, 6]
let odds:  Set = [1, 3, 5]
evens.isDisjoint(with: odds)       // true

Estos tres predicados son la forma más limpia de expresar "permisos requeridos" o reglas "all-of" / "none-of" sin escribir un bucle manual.

challenge icon

Desafío

Intermedio

Estás verificando el acceso a un documento. Lee tres líneas:

  1. Los permisos del usuario (separados por comas)
  2. Los permisos requeridos (separados por comas)
  3. Los permisos prohibidos (separados por comas)

Al usuario se le concede el acceso cuando:

  • Sus permisos son un superset de los requeridos (posee cada permiso requerido)
  • Sus permisos son disjoint de los prohibidos

Imprime exactamente uno de los siguientes:

  • granted
  • missing: <...> cuando faltan permisos requeridos (ordenados, separados por comas). Imprime esto incluso si también se poseen permisos prohibidos.
  • forbidden: <...> cuando no faltan permisos requeridos pero se poseen permisos prohibidos (ordenados, separados por comas)

Para la entrada read,write,admin / read,write / delete, la salida es granted.

Para la entrada read / read,write / delete, la salida es missing: write.

Hoja de referencia

Métodos de comparación de conjuntos en Swift:

let small: Set = [1, 2]
let big:   Set = [1, 2, 3, 4]

small.isSubset(of: big)      // true – cada elemento de small está en big
big.isSuperset(of: small)    // true – big contiene cada elemento de small

let evens: Set = [2, 4, 6]
let odds:  Set = [1, 3, 5]
evens.isDisjoint(with: odds) // true – no hay elementos compartidos

Pruébalo tú mismo

let user = Set(readLine()!.components(separatedBy: ","))
let required = Set(readLine()!.components(separatedBy: ","))
let forbidden = Set(readLine()!.components(separatedBy: ","))

// TODO: concedido | faltante: ... | prohibido: ...
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo