جدولة الفعاليات
جزء من قسم البرمجة كائنية التوجه في رحلة Swift على Coddy. الدرس 56 من 57.
التحدي
صعبأنشئ مُجدولًا للأحداث باستخدام البروتوكولات القياسية. 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())
جميع دروس البرمجة كائنية التوجه
1الأصناف والكائنات
العمل مع الملفاتتعريف الأصنافالأساليب وselfالمُهيِّئاتالأصناف هي مراجعمراجعة - بطاقة المكتبة4التغليف
التحكم في الوصولللقراءة فقط من الخارجحماية الحالةالمهيئات القابلة للفشلمراجعة - الحساب البنكي7تعدد الأشكال والأنواع العامة
تعدد الأشكالتحويل الأنواعالدوال العامةالأنواع العامةمراجعة - حاسبة الأشكالتدرّب بنفسك: Playground لـ Swift