Menu
CoddyTech

Lịch sự kiện

Thuộc phần Lập trình hướng đối tượng trong hành trình Swift của Coddy. Bài học 56 trên 57.

challenge icon

Thử thách

Khó

Xây dựng bộ lập lịch sự kiện bằng các giao thức tiêu chuẩn. Event là một struct có title, day (1-31), start và end biểu thị giờ. Nó tuân theo Comparable (sắp xếp theo ngày, rồi đến giờ bắt đầu, rồi đến tiêu đề), Hashable và Equatable, chỉ dựa trên tiêu đề và ngày (cùng một sự kiện được nhập hai lần), đồng thời tuân theo CustomStringConvertible với định dạng day 3 09-11 standup. Lớp Scheduler có add(_:), trả về added, duplicate (cùng tiêu đề trong cùng ngày) hoặc conflicts with <title> (một sự kiện đã có trong ngày đó có giờ bị trùng: sự kiện này bắt đầu trước khi sự kiện kia kết thúc). agenda() trả về danh sách sự kiện đã sắp xếp, còn busiestDay() trả về busiest day 3: 5h hoặc no events.

Code được cung cấp đọc các sự kiện từ những dòng có định dạng title,day,start,end và in phản hồi cho từng dòng, sau đó in chương trình nghị sự (mỗi sự kiện trên một dòng) và ngày bận rộn nhất.

Code của bạn nằm trong Event.swift và Scheduler.swift. main.swift chứa code đầu vào/đầu ra được cung cấp và bạn không thể chỉnh sửa tệp này.

Tự làm thử

// Đoạn code đầu vào/đầu ra được cung cấp sẵn: giữ nguyên
var input: [String] = []
while let line = readLine() { input.append(line) }
let scheduler = Scheduler()
for line in input {
    let p = line.split(separator: ",").map(String.init)
    print(scheduler.add(Event(title: p[0], day: Int(p[1])!, start: Int(p[2])!, end: Int(p[3])!)))
}
for e in scheduler.agenda() { print(e) }
print(scheduler.busiestDay())

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Playground Swift