Menu
Coddy logo textTech

Harmonogram wydarzeń

Część sekcji Programowanie obiektowe ścieżki Kotlin w Coddy. Lekcja 56 z 57.

challenge icon

Wyzwanie

Trudny

Zbuduj harmonogram wydarzeń.

  • Event(title, day, start, end) (godziny od 0 do 24) to klasa implementująca Comparable<Event>, uporządkowana według dnia, następnie godziny rozpoczęcia, a potem tytułu. Dwa wydarzenia są równe, gdy ich tytuły i dni są takie same (to samo wydarzenie dodane dwukrotnie), więc nadpisz equals i hashCode dla tych dwóch właściwości. Wydarzenie jest wyświetlane jako day 3 09-11 standup, z dwucyfrowymi godzinami. overlaps(other) ma wartość true tego samego dnia, gdy każde wydarzenie rozpoczyna się przed zakończeniem drugiego.
  • Scheduler.add(event) zwraca invalid: standup, gdy wydarzenie nie kończy się po rozpoczęciu, duplicate w przypadku równego wydarzenia, conflicts with review w przypadku pierwszego nakładającego się wydarzenia w kolejności agendy albo added.
  • agenda() zwraca posortowane wydarzenia, a busiestDay() zwraca busiest day 3: 5h dla dnia z największą liczbą zarezerwowanych godzin (przy remisie wcześniejszego dnia) albo no events.

Dostarczony kod odczytuje wydarzenia z wierszy w formacie title,day,start,end, wyświetla odpowiedź dla każdego z nich, a następnie agendę (po jednym wydarzeniu w wierszu) i najbardziej pracowity dzień.

Twój kod umieść w plikach Event.kt i Scheduler.kt. Main.kt zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.

Spróbuj swoich sił

fun main() {
    // Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
    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())
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Edytor online Kotlin