Menu
Coddy logo textTech

Planificador de eventos

Parte de la sección Programación orientada a objetos del Journey de Kotlin de Coddy. Lección 56 de 57.

challenge icon

Desafío

Difícil

Construye un programador de eventos.

  • Event(title, day, start, end) (horas de 0 a 24) es una clase que implementa Comparable<Event>, ordenada por día, después por inicio y después por título. Dos eventos son iguales cuando coinciden su título y día (el mismo evento introducido dos veces), así que sobrescribe equals y hashCode basándote en esas dos propiedades. Se imprime como day 3 09-11 standup, con horas de dos dígitos. overlaps(other) es verdadero el mismo día cuando cada evento comienza antes de que termine el otro.
  • Scheduler.add(event) responde invalid: standup cuando el evento no termina después de comenzar, duplicate para un evento igual, conflicts with review para el primer evento superpuesto en el orden de la agenda, o added.
  • agenda() devuelve los eventos ordenados, y busiestDay() devuelve busiest day 3: 5h para el día con más horas reservadas (el día más temprano en caso de empate), o no events.

El código proporcionado lee los eventos como líneas con el formato title,day,start,end, imprime la respuesta para cada uno, después la agenda (un evento por línea) y el día más ocupado.

Tu código debe estar en Event.kt y Scheduler.kt. Main.kt contiene el código proporcionado de entrada/salida y no se puede editar.

Pruébalo tú mismo

fun main() {
    // Código de entrada/salida suministrado: déjalo tal como está
    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())
}

Todas las lecciones de Programación orientada a objetos

Practica por tu cuenta: Playground de Kotlin