Menu
Coddy logo textTech

Veranstaltungsplaner

Teil des Abschnitts Objektorientierte Programmierung der Kotlin-Journey von Coddy. Lektion 56 von 57.

challenge icon

Aufgabe

Schwer

Erstelle einen Ereignisplaner.

  • Event(title, day, start, end) (Stunden von 0 bis 24) ist eine Klasse, die Comparable<Event> implementiert und nach Tag, dann Startzeit und dann Titel geordnet wird. Zwei Ereignisse sind gleich, wenn ihr Titel und ihr Tag übereinstimmen (dasselbe Ereignis wurde zweimal eingegeben). Überschreibe daher equals und hashCode anhand dieser beiden Eigenschaften. Die Ausgabe erfolgt als day 3 09-11 standup, mit zweistelligen Stunden. overlaps(other) ist am selben Tag true, wenn jedes Ereignis beginnt, bevor das jeweils andere endet.
  • Scheduler.add(event) antwortet mit invalid: standup, wenn das Ereignis nicht nach seinem Beginn endet, mit duplicate bei einem gleichen Ereignis, mit conflicts with review beim ersten sich überschneidenden Ereignis in der Agenda-Reihenfolge oder mit added.
  • agenda() gibt die sortierten Ereignisse zurück, und busiestDay() gibt für den Tag mit den meisten gebuchten Stunden busiest day 3: 5h zurück (bei Gleichstand den früheren Tag) oder no events.

Der bereitgestellte Code liest Ereignisse als Zeilen im Format title,day,start,end, gibt für jedes die Antwort aus, danach die Agenda (ein Ereignis pro Zeile) und den Tag mit der höchsten Auslastung.

Dein Code gehört in Event.kt und Scheduler.kt. Main.kt enthält den bereitgestellten Eingabe-/Ausgabecode und darf nicht bearbeitet werden.

Probier es selbst

fun main() {
    // Gelieferter Ein-/Ausgabe-Code: belasse ihn wie er ist
    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())
}

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Kotlin-Playground