Menu
Coddy logo textTech

Haftalık Izgara

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

Takvimi yazdırma zamanı. Her alışkanlık için, tamamlanan günlerde X ve diğer yerlerde . olan yedi karakterlik bir ızgara oluşturun.

// days = [1, 3, 5]
// şunu oluşturur: X.X.X..

Faydalı bir yöntem: ızgarayı bir karakter dizisi olarak oluşturun, ardından bir kez String'e dönüştürün.

var slots = Array(repeating: ".", count: 7)
for d in days {
    slots[d - 1] = "X"
}
let row = slots.joined()

days 1-tabanlıdır (Mon = 1) ancak Swift dizileri 0-tabanlıdır, bu nedenle atama yaparken 1 çıkarın. Aralık dışı günler çökmeye neden olur, bu nedenle girdi formatına güvenin.

challenge icon

Görev

Orta

Tek bir giriş satırı okuyun: virgülle ayrılmış habit:day girişlerinden oluşan bir liste. Sözlüğü daha önce olduğu gibi oluşturun, ardından her alışkanlık için (alfabetik olarak sıralanmış) şu formatta bir satır yazdırın:

<habit> |<grid>| <count>

burada grid yedi karakterlik X/. dizisidir ve count o alışkanlık için tamamlanan benzersiz günlerin sayısıdır.

read:1,read:3,read:5,workout:2,workout:4 girişi için çıktı şöyledir:

read |X.X.X..| 3
workout |.X.X...| 2

Kopya kağıdı

Tamamlanan günlerde X ve diğer yerlerde . olan 7 karakterlik bir ızgara oluşturun (günler 1 tabanlıdır):

var slots = Array(repeating: ".", count: 7)
for d in days {
    slots[d - 1] = "X"
}
let row = slots.joined()

Kendin dene

var habits: [String: [Int]] = [:]
let ops = readLine()!.components(separatedBy: ",")
for op in ops {
    let parts = op.components(separatedBy: ":")
    let day = Int(parts[1])!
    if !(habits[parts[0], default: []].contains(day)) {
        habits[parts[0], default: []].append(day)
    }
}

// TODO: her alışkanlık için 7 bölmeli bir ızgara oluşturun; '<name> |<grid>| <count>' yazdırın
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