Agendador de Eventos
Parte da seção Programação Orientada a Objetos do Journey de Kotlin da Coddy. Lição 56 de 57.
Desafio
DifícilCrie um agendador de eventos.
Event(title, day, start, end)(horas de 0 a 24) é uma classe que implementaComparable<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, substituaequalsehashCodecom base nessas duas propriedades. A impressão deve ser comoday 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)respondeinvalid: standupquando o evento não termina depois de começar,duplicatepara um evento igual,conflicts with reviewpara o primeiro evento sobreposto na ordem da agenda, ouadded.agenda()retorna os eventos ordenados, ebusiestDay()retornabusiest day 3: 5hpara o dia com mais horas agendadas (em caso de empate, o dia anterior), ouno 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
1Classes e Objetos
Trabalhando com ArquivosDefinindo ClassesConstrutores PrimáriosBlocos init e ValidaçãoConstrutores SecundáriosRecapitulação - Cartão da Biblioteca4Herança
Classes Abertas e SubclassesSobrescrevendo Membrossuper e ConstrutoresClasses AbstratasRevisão - Diretório de Funcionários2Propriedades e Encapsulamento
Acessores PersonalizadosModificadores de VisibilidadeSetters Privadoslazy e lateinitRevisão - Conta Bancária5Interfaces
Declarando InterfacesMétodos PadrãoMúltiplas InterfacesInterfaces como TiposRecapitulação - Métodos de Pagamento8Genéricos
Funções genéricasClasses genéricasRestrições de tipoVariância com in e outRecapitulação - Fila de prioridade11Projeto: Gerenciamento de Biblioteca
Livros e MembrosEmpréstimo de LivrosPratique por conta própria: Playground de Kotlin