Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

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

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