מתזמן אירועים
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Kotlin של Coddy. שיעור 56 מתוך 57.
אתגר
קשהבנו מתזמן אירועים.
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())
}
כל השיעורים ביחידה תכנות מונחה עצמים
1מחלקות ואובייקטים
עבודה עם קבציםהגדרת מחלקותבנאים ראשייםבלוקי init ואימות נתוניםבנאים משנייםסיכום – כרטיס ספרייהתרגלו בעצמכם: Kotlin אונליין