Menu
Coddy logo textTech

Planificateur d’événements

Fait partie de la section Programmation orientée objet du Journey Kotlin de Coddy. Leçon 56 sur 57.

challenge icon

Défi

Difficile

Créez un planificateur d’événements.

  • Event(title, day, start, end) (heures de 0 à 24) est une classe qui implémente Comparable<Event>, triée par jour, puis par heure de début, puis par titre. Deux événements sont égaux lorsque leur titre et leur jour correspondent (le même événement saisi deux fois) ; vous devez donc redéfinir equals et hashCode sur ces deux propriétés. Il s’affiche sous la forme day 3 09-11 standup, avec des heures à deux chiffres. overlaps(other) vaut true le même jour lorsque chacun commence avant la fin de l’autre.
  • Scheduler.add(event) renvoie invalid: standup lorsque l’événement ne se termine pas après son début, duplicate pour un événement égal, conflicts with review pour le premier événement qui se chevauche dans l’ordre de l’agenda, ou added.
  • agenda() renvoie les événements triés, et busiestDay() renvoie busiest day 3: 5h pour le jour ayant le plus grand nombre d’heures réservées (le jour le plus tôt en cas d’égalité), ou no events.

Le code fourni lit les événements sous forme de lignes title,day,start,end, affiche la réponse pour chacun, puis l’agenda (un événement par ligne) et le jour le plus chargé.

Votre code doit se trouver dans Event.kt et Scheduler.kt. Main.kt contient le code fourni pour les entrées et sorties et ne peut pas être modifié.

Essayez vous-même

fun main() {
    // Code d'entrée/sortie fourni : le garder tel quel
    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())
}

Toutes les leçons de Programmation orientée objet

Entraînez-vous par vous-même : Playground Kotlin