Menu
Coddy logo textTech

מתזמן אירועים

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Kotlin של Coddy. שיעור 56 מתוך 57.

challenge icon

אתגר

קשה

בנו מתזמן אירועים.

  • Event(title, day, start, end) (שעות מ־0 עד 24) היא מחלקה שמממשת את Comparable<Event>, וממוינת לפי היום, אחר כך לפי שעת ההתחלה ולבסוף לפי הכותרת. שני אירועים שווים כאשר הכותרת והיום שלהם זהים (אותו אירוע הוזן פעמיים), לכן יש לדרוס את equals ואת hashCode עבור שתי התכונות האלה. היא מודפסת כך: day 3 09-11 standup, עם שעות בשתי ספרות. overlaps(other) מחזירה true באותו יום, כאשר כל אחד מהאירועים מתחיל לפני שהאחר מסתיים.
  • 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())
}

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: Kotlin אונליין