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

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

جزء من قسم البرمجة كائنية التوجه في رحلة Kotlin على Coddy. الدرس 56 من 57.

challenge icon

التحدي

صعب

أنشئ مجدولًا للأحداث.

  • 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())
}

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

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