مجدول الفعاليات
جزء من قسم البرمجة كائنية التوجه في رحلة Kotlin على Coddy. الدرس 56 من 57.
التحدي
صعبأنشئ مجدولًا للأحداث.
Event(title, day, start, end)(الساعات من 0 إلى 24) هو فئة تطبّقComparable<Event>، وتُرتَّب حسب اليوم، ثم وقت البدء، ثم العنوان. يكون حدثان متساويين عندما يتطابق عنوانهما ويومهما (أي عند إدخال الحدث نفسه مرتين)، لذا عليك تجاوزequalsوhashCodeبالاعتماد على هاتين الخاصيتين. تتم طباعته بالشكلday 3 09-11 standup، مع عرض الساعات برقمين. تكونoverlaps(other)صحيحة في اليوم نفسه عندما يبدأ كل حدث قبل انتهاء الحدث الآخر.- تُرجع
Scheduler.add(event)القيمةinvalid: standupعندما لا ينتهي الحدث بعد بدئه، وduplicateلحدث مساوٍ، وconflicts with reviewلأول حدث متداخل وفق ترتيب جدول الأعمال، أوadded. - تُرجع
agenda()الأحداث مرتبة، وتُرجعbusiestDay()القيمةbusiest day 3: 5hلليوم الذي يحتوي على أكبر عدد من الساعات المحجوزة (اليوم الأسبق عند التعادل)، أوno events.
يقرأ الكود المُزوَّد الأحداث على شكل أسطر من title,day,start,end، ويطبع الرد لكل حدث، ثم جدول الأعمال (حدث واحد في كل سطر) واليوم الأكثر ازدحامًا.
ضع كودك في Event.kt وScheduler.kt. يحتوي Main.kt على كود الإدخال/الإخراج المُزوَّد ولا يمكن تعديله.
جرّب بنفسك
fun main() {
// كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
val input = generateSequence(::readLine).toList()
val scheduler = Scheduler()
for (line in input) {
val p = line.split(",")
println(scheduler.add(Event(p[0], p[1].toInt(), p[2].toInt(), p[3].toInt())))
}
for (e in scheduler.agenda()) println(e)
println(scheduler.busiestDay())
}
جميع دروس البرمجة كائنية التوجه
1الفئات والكائنات
العمل مع الملفاتتعريف الفئاتالمنشئات الأساسيةكتل init والتحقق من الصحةالمنشئات الثانويةمراجعة - بطاقة المكتبة4الوراثة
الأصناف المفتوحة والأصناف الفرعيةتجاوز الأعضاءsuper والمنشئاتالأصناف المجرّدةمراجعة - دليل الموظفينتدرّب بنفسك: Playground لـ Kotlin