Recapitulação - Fila de prioridade
Parte da seção Programação Orientada a Objetos do Journey de Kotlin da Coddy. Lição 41 de 57.
Desafio
MédioCrie uma fila de prioridade que funcione para qualquer tipo priorizado. Prioritized (com priority) e as classes de dados Job e Ticket são fornecidas.
TaskQueue<T : Prioritized>tempush(item),pop()epeek(), que removem ou retornam o item com a maior prioridade (o que foi inserido primeiro entre prioridades iguais) ounull,size,items()(um instantâneo somente para leitura na ordem de remoção) edrain(n), que remove aténitens e os retorna como umaList<T>.- A função genérica
countUrgent(queue, min)recebe uma fila de qualquer tipo priorizado e retorna quantos de seus itens têm pelo menos essa prioridade.
O código fornecido lê os comandos job build 3, ticket 17 5 ada, pop jobs, peek tickets, drain 2 (tickets) ou sizes, exibe cada resposta e, por fim, urgent: com os jobs e tickets urgentes que ainda estão na fila.
Seu código deve estar em TaskQueue.kt, Prioritized.kt, Job.kt e Ticket.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 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 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