Menu
Coddy logo textTech

Agendador de Eventos

Parte da seção Programação Orientada a Objetos do Journey de Kotlin da Coddy. Lição 56 de 57.

challenge icon

Desafio

Difícil

Crie um agendador de eventos.

  • Event(title, day, start, end) (horas de 0 a 24) é uma classe que implementa Comparable<Event>, ordenada por dia, depois por início e, por fim, por título. Dois eventos são iguais quando o título e o dia coincidem (o mesmo evento inserido duas vezes); portanto, substitua equals e hashCode com base nessas duas propriedades. A impressão deve ser como day 3 09-11 standup, com horas de dois dígitos. overlaps(other) é verdadeiro no mesmo dia quando cada evento começa antes do término do outro.
  • Scheduler.add(event) responde invalid: standup quando o evento não termina depois de começar, duplicate para um evento igual, conflicts with review para o primeiro evento sobreposto na ordem da agenda, ou added.
  • agenda() retorna os eventos ordenados, e busiestDay() retorna busiest day 3: 5h para o dia com mais horas agendadas (em caso de empate, o dia anterior), ou no events.

O código fornecido lê os eventos em linhas no formato title,day,start,end, imprime a resposta para cada um, depois a agenda (um evento por linha) e o dia mais ocupado.

Seu código deve estar em Event.kt e Scheduler.kt. Main.kt contém o código fornecido de entrada/saída e não pode ser editado.

Experimente você mesmo

fun main() {
    // Código de entrada/saída fornecido: mantenha-o 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 as lições de Programação Orientada a Objetos

Pratique por conta própria: Playground de Kotlin