Menu
Coddy logo textTech

Alt Küme ve Üst Küme

Coddy'nin Swift Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 21 / 56.

Kümeleri birleştirmenin ötesinde, onları karşılaştırabilirsiniz de.

isSubset(of:), "benim her bir elemanım diğer kümede de var mı?" sorusunu yanıtlar.

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

isSuperset(of:) bunun tersidir, "diğer kümenin her elemanını içeriyor muyum?":

big.isSuperset(of: small)          // true

isDisjoint(with:), iki kümenin hiçbir ortak elemanı olmadığında true değerini döndürür:

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

Bu üç yüklem, manuel bir döngü yazmadan "gerekli izinler" veya "hepsi" / "hiçbiri" kurallarını ifade etmenin en temiz yoludur.

challenge icon

Görev

Orta

Bir belge için erişim kontrolü yapıyorsunuz. Üç satır okuyun:

  1. Kullanıcının izinleri (virgülle ayrılmış)
  2. Gerekli izinler (virgülle ayrılmış)
  3. Yasaklı izinler (virgülle ayrılmış)

Kullanıcıya şu durumlarda erişim izni verilir:

  • İzinleri, gerekli izinlerin bir üst kümesi (superset) olduğunda (her bir gerekli izne sahip olunduğunda)
  • İzinleri, yasaklı izinlerle ayrık (disjoint) olduğunda

Tam olarak şunlardan birini yazdırın:

  • granted
  • Gerekli izinler eksik olduğunda missing: <...> (sıralı, virgülle ayrılmış). Yasaklı izinlere sahip olunsa bile bunu yazdırın.
  • Hiçbir gerekli izin eksik değilse ancak yasaklı izinlere sahip olunmuşsa forbidden: <...> (sıralı, virgülle ayrılmış)

read,write,admin / read,write / delete girişi için çıktı granted olur.

read / read,write / delete girişi için çıktı missing: write olur.

Kopya kağıdı

Swift'te küme karşılaştırma yöntemleri:

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

small.isSubset(of: big)      // true – small'ın her elemanı big içindedir
big.isSuperset(of: small)    // true – big, small'ın her elemanını içerir

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

Kendin dene

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

// TODO: sağlanan | eksik: ... | yasaklı: ...
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık ve Akış bölümündeki tüm dersler