סיכום – תור עדיפויות
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Kotlin של Coddy. שיעור 41 מתוך 57.
אתגר
בינוניבנו תור עדיפויות שעובד עם כל סוג שניתן לתעדף. Prioritized (עם priority) ומחלקות הנתונים Job ו-Ticket מסופקים.
- ל-
TaskQueue<T : Prioritized>יש אתpush(item),pop()ו-peek(), שמסירים או מחזירים את הפריט בעל העדיפות הגבוהה ביותר (מבין פריטים בעלי עדיפות זהה, זה שהוכנס ראשון) או אתnull, אתsize, אתitems()(תמונת מצב לקריאה בלבד לפי סדר ההוצאה) ואתdrain(n), שמוציא עדnפריטים ומחזיר אותם בתורList<T>. - הפונקציה הגנרית
countUrgent(queue, min)מקבלת תור של כל סוג שניתן לתעדף ומחזירה כמה מהפריטים בו הם בעלי עדיפות של לפחות הערך הזה.
הקוד המסופק קורא פקודות job build 3, ticket 17 5 ada, pop jobs, peek tickets, drain 2 (כרטיסים) או sizes, מדפיס כל תגובה ולבסוף urgent: יחד עם העבודות והכרטיסים הדחופים שעדיין בתור.
הקוד שלכם ייכתב בקבצים TaskQueue.kt, Prioritized.kt, Job.kt ו-Ticket.kt. הקובץ Main.kt מכיל את קוד הקלט/פלט המסופק ואי אפשר לערוך אותו.
נסו בעצמכם
fun main() {
// קוד הקלט/פלט שסופק: יש להשאיר אותו כפי שהוא
val input = generateSequence(::readLine).toList()
val jobs = TaskQueue<Job>()
val tickets = TaskQueue<Ticket>()
for (cmd in input) {
val p = cmd.split(" ")
when (p[0]) {
"job" -> jobs.push(Job(p[1], p[2].toInt()))
"ticket" -> tickets.push(Ticket(p[1].toInt(), p[2].toInt(), p[3]))
"pop" -> println("popped " + (if (p[1] == "jobs") jobs.pop() else tickets.pop()))
"peek" -> println("next " + (if (p[1] == "jobs") jobs.peek() else tickets.peek()))
"drain" -> println("drained " + tickets.drain(p[1].toInt()).map { it.customer })
else -> println("jobs ${jobs.size}, tickets ${tickets.size}")
}
}
println("urgent: ${countUrgent(jobs, 4) + countUrgent(tickets, 4)}")
}
כל השיעורים ביחידה תכנות מונחה עצמים
1מחלקות ואובייקטים
עבודה עם קבציםהגדרת מחלקותבנאים ראשייםבלוקי init ואימות נתוניםבנאים משנייםסיכום – כרטיס ספרייה8טיפוסים גנריים
פונקציות גנריותמחלקות גנריותאילוצי טיפוסיםקווריאנטיות עם in ו-outסיכום – תור עדיפויותתרגלו בעצמכם: Kotlin אונליין