Harmonogram wydarzeń
Część sekcji Programowanie obiektowe ścieżki Kotlin w Coddy. Lekcja 56 z 57.
Wyzwanie
TrudnyZbuduj harmonogram wydarzeń.
Event(title, day, start, end)(godziny od 0 do 24) to klasa implementującaComparable<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 nadpiszequalsihashCodedla tych dwóch właściwości. Wydarzenie jest wyświetlane jakoday 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)zwracainvalid: standup, gdy wydarzenie nie kończy się po rozpoczęciu,duplicatew przypadku równego wydarzenia,conflicts with revieww przypadku pierwszego nakładającego się wydarzenia w kolejności agendy alboadded.agenda()zwraca posortowane wydarzenia, abusiestDay()zwracabusiest day 3: 5hdla dnia z największą liczbą zarezerwowanych godzin (przy remisie wcześniejszego dnia) albono 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
1Klasy i obiekty
Praca z plikamiDefiniowanie klasKonstruktory główneBloki init i walidacjaKonstruktory dodatkowePodsumowanie — karta biblioteczna4Dziedziczenie
Klasy otwarte i podklasyNadpisywanie składowychsuper i konstruktoryKlasy abstrakcyjnePodsumowanie – katalog pracowników7Klasy specjalne
Klasy danychKlasy wyliczenioweHierarchie zapieczętowaneequals, hashCode, toStringPodsumowanie — śledzenie zamówień10Wzorce projektowe, część 2
Delegowanie za pomocą byWzorzec dekoratoraWzorzec budowniczegoWzorzec stanu2Właściwości i hermetyzacja
Własne akcesoryModyfikatory widocznościPrywatne setterylazy i lateinitPowtórka – konto bankowe5Interfejsy
Deklarowanie interfejsówMetody domyślneWiele interfejsówInterfejsy jako typyPowtórzenie – metody płatności8Typy generyczne
Funkcje generyczneKlasy generyczneOgraniczenia typówKowariancja i kontrawariancja: in i outPodsumowanie — kolejka priorytetowa11Projekt: Zarządzanie biblioteką
Książki i czytelnicyWypożyczanie książekPoćwicz samodzielnie: Edytor online Kotlin