Pianificatore di eventi
Fa parte della sezione Programmazione orientata agli oggetti del percorso Kotlin di Coddy. Lezione 56 di 57.
Sfida
DifficileCrea uno scheduler di eventi.
Event(title, day, start, end)(ore da 0 a 24) è una classe che implementaComparable<Event>, ordinata per giorno, poi per ora di inizio e infine per titolo. Due eventi sono uguali quando il titolo e il giorno corrispondono (lo stesso evento inserito due volte), quindi sovrascriviequalsehashCodeper queste due proprietà. Viene stampato comeday 3 09-11 standup, con le ore a due cifre.overlaps(other)è vero nello stesso giorno quando ciascun evento inizia prima che l'altro finisca.Scheduler.add(event)rispondeinvalid: standupquando l'evento non termina dopo il suo inizio,duplicateper un evento uguale,conflicts with reviewper il primo evento sovrapposto nell'ordine dell'agenda, oppureadded.agenda()restituisce gli eventi ordinati ebusiestDay()restituiscebusiest day 3: 5hper il giorno con il maggior numero di ore prenotate (in caso di parità, il giorno precedente), oppureno events.
Il codice fornito legge gli eventi come righe title,day,start,end, stampa la risposta per ciascuno, poi l'agenda (un evento per riga) e il giorno più impegnato.
Il tuo codice va inserito in Event.kt e Scheduler.kt. Main.kt contiene il codice di input/output fornito e non può essere modificato.
Provalo tu
fun main() {
// Codice di input/output fornito: lascialo così com'è
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())
}
Tutte le lezioni di Programmazione orientata agli oggetti
1Classi e oggetti
Lavorare con i fileDefinire le classiCostruttori primariBlocchi init e convalidaCostruttori secondariRiepilogo - Tessera della biblioteca4Ereditarietà
Classi aperte e sottoclassiRidefinizione dei membrisuper e costruttoriClassi astratteRiepilogo - Elenco del personale2Proprietà e incapsulamento
Accessor personalizzatiModificatori di visibilitàSetter privatilazy e lateinitRipasso - Conto bancario5Interfacce
Dichiarare le interfacceMetodi predefinitiInterfacce multipleLe interfacce come tipiRiepilogo - Metodi di pagamento8Tipi generici
Funzioni genericheClassi genericheVincoli sui tipiVarianza con in e outRiepilogo - Coda con priorità11Progetto: Gestione della biblioteca
Libri e sociPrendere in prestito i libriEsercitati da solo: Playground Kotlin