Menu
CoddyTech

Lưới theo tuần

Thuộc phần Logic và luồng thực thi trong hành trình Swift của Coddy. Bài học 36 trên 56.

Đã đến lúc in lịch ra. Với mỗi thói quen, hãy hiển thị một lưới gồm bảy ký tự, dùng X cho những ngày đã hoàn thành và . cho những ngày còn lại.

// days = [1, 3, 5]
// hiển thị: X.X.X..

Mẹo hữu ích: tạo lưới dưới dạng mảng ký tự, rồi chuyển thành String một lần.

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

days bắt đầu từ chỉ số 1 (Thứ Hai = 1), nhưng mảng Swift bắt đầu từ chỉ số 0, nên hãy trừ 1 khi gán. Ngày nằm ngoài phạm vi sẽ gây lỗi, vì vậy hãy tin vào định dạng đầu vào.

challenge icon

Thử thách

Trung bình

Đọc một dòng đầu vào: danh sách các mục habit:day, được phân tách bằng dấu phẩy. Tạo từ điển như trước, sau đó in mỗi thói quen trên một dòng, sắp xếp theo thứ tự bảng chữ cái, theo định dạng:

<habit> |<grid>| <count>

trong đó grid là chuỗi gồm bảy ký tự X/. và count là số ngày hoàn thành duy nhất của thói quen đó.

Với đầu vào read:1,read:3,read:5,workout:2,workout:4, đầu ra là:

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

Tự làm thử

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: tạo bảng gồm 7 ô cho mỗi thói quen; in ra '<name> |<grid>| <count>'
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng thực thi

Tự luyện tập: Playground Swift