Menu
CoddyTech

جدولة الفعاليات

جزء من قسم البرمجة كائنية التوجه في رحلة 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())

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: Playground لـ Swift