Planificador de eventos
Parte de la sección Programación orientada a objetos del Journey de Kotlin de Coddy. Lección 56 de 57.
Desafío
DifícilConstruye un programador de eventos.
Event(title, day, start, end)(horas de 0 a 24) es una clase que implementaComparable<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 sobrescribeequalsyhashCodebasándote en esas dos propiedades. Se imprime comoday 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)respondeinvalid: standupcuando el evento no termina después de comenzar,duplicatepara un evento igual,conflicts with reviewpara el primer evento superpuesto en el orden de la agenda, oadded.agenda()devuelve los eventos ordenados, ybusiestDay()devuelvebusiest day 3: 5hpara el día con más horas reservadas (el día más temprano en caso de empate), ono 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
1Clases y objetos
Trabajar con archivosDefinir clasesConstructores primariosBloques init y validaciónConstructores secundariosRepaso - Tarjeta de biblioteca4Herencia
Clases abiertas y subclasesSobrescritura de miembrossuper y constructoresClases abstractasRepaso: directorio del personal2Propiedades y encapsulación
Accesores personalizadosModificadores de visibilidadSetters privadoslazy y lateinitRepaso: cuenta bancaria5Interfaces
Declaración de interfacesMétodos predeterminadosInterfaces múltiplesInterfaces como tiposRepaso: métodos de pago8Genéricos
Funciones genéricasClases genéricasRestricciones de tiposVariancia con in y outRepaso - Cola de prioridad11Proyecto: Gestión de biblioteca
Libros y miembrosPréstamo de librosPractica por tu cuenta: Playground de Kotlin