Repaso - Cola de prioridad
Parte de la sección Programación orientada a objetos del Journey de Kotlin de Coddy. Lección 41 de 57.
Desafío
IntermedioConstruye una cola de prioridad que funcione para cualquier tipo priorizado. Se proporcionan Prioritized (con priority) y las clases de datos Job y Ticket.
TaskQueue<T : Prioritized>tienepush(item),pop()ypeek(), que eliminan o devuelven el elemento con la prioridad más alta (el que se insertó primero entre los de igual prioridad) onull,size,items()(una instantánea de solo lectura en orden de extracción) ydrain(n), que extrae hastanelementos y los devuelve como unaList<T>.- La función genérica
countUrgent(queue, min)recibe una cola de cualquier tipo priorizado y devuelve cuántos de sus elementos tienen al menos esa prioridad.
El código proporcionado lee los comandos job build 3, ticket 17 5 ada, pop jobs, peek tickets, drain 2 (tickets) o sizes, imprime cada respuesta y finalmente urgent: con los trabajos y tickets urgentes que aún están en la cola.
Tu código debe estar en TaskQueue.kt, Prioritized.kt, Job.kt y Ticket.kt. Main.kt contiene el código de entrada/salida proporcionado y no se puede editar.
Pruébalo tú mismo
fun main() {
// Código de entrada/salida suministrado: déjalo como está
val input = generateSequence(::readLine).toList()
val jobs = TaskQueue<Job>()
val tickets = TaskQueue<Ticket>()
for (cmd in input) {
val p = cmd.split(" ")
when (p[0]) {
"job" -> jobs.push(Job(p[1], p[2].toInt()))
"ticket" -> tickets.push(Ticket(p[1].toInt(), p[2].toInt(), p[3]))
"pop" -> println("popped " + (if (p[1] == "jobs") jobs.pop() else tickets.pop()))
"peek" -> println("next " + (if (p[1] == "jobs") jobs.peek() else tickets.peek()))
"drain" -> println("drained " + tickets.drain(p[1].toInt()).map { it.customer })
else -> println("jobs ${jobs.size}, tickets ${tickets.size}")
}
}
println("urgent: ${countUrgent(jobs, 4) + countUrgent(tickets, 4)}")
}
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