Menu
Coddy logo textTech

מתזמן אירועים

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Swift של Coddy. שיעור 56 מתוך 57.

challenge icon

אתגר

קשה

בנה מתזמן אירועים עם הפרוטוקולים הסטנדרטיים. Event הוא מבנה עם title,‏ day (1-31),‏ start ושעות end. הוא תואם ל־Comparable (לפי היום, אחר כך שעת ההתחלה ואז הכותרת), ל־Hashable ול־Equatable לפי הכותרת והיום בלבד (אותו אירוע הוזן פעמיים), וגם ל־CustomStringConvertible ומוצג כך: day 3 09-11 standup. למחלקה Scheduler יש את add(_:), שמחזירה added,‏ duplicate (אותה כותרת באותו יום) או conflicts with <title> (אירוע קיים באותו יום ששעותיו חופפות: אחד מתחיל לפני שהאחר מסתיים). agenda() מחזירה את האירועים ממוינים, ו־busiestDay() מחזירה busiest day 3: 5h או no events.

הקוד שסופק קורא אירועים בשורות בפורמט title,day,start,end ומדפיס את התשובה עבור כל אחד מהם, ואז את סדר היום (אירוע אחד בכל שורה) ואת היום העמוס ביותר.

הקוד שלך צריך להיכנס לקבצים Event.swift ו־Scheduler.swift. הקובץ main.swift מכיל את קוד הקלט/פלט שסופק ואי אפשר לערוך אותו.

נסו בעצמכם

// קוד הקלט/פלט שסופק: יש להשאיר אותו כפי שהוא
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())

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: Swift אונליין