Riepilogo - Coda con priorità
Fa parte della sezione Programmazione orientata agli oggetti del percorso Kotlin di Coddy. Lezione 41 di 57.
Sfida
MedioCrea una coda di priorità che funzioni con qualsiasi tipo prioritizzato. Prioritized (con priority) e le classi dati Job e Ticket sono fornite.
TaskQueue<T : Prioritized>hapush(item),pop()epeek(), che rimuovono o restituiscono l'elemento con la priorità più alta (quello inserito per primo tra quelli con priorità uguale) oppurenull,size,items()(uno snapshot di sola lettura nell'ordine di estrazione) edrain(n), che estrae fino anelementi e li restituisce comeList<T>.- La funzione generica
countUrgent(queue, min)accetta una coda di qualsiasi tipo prioritizzato e restituisce quanti dei suoi elementi hanno almeno quella priorità.
Il codice fornito legge i comandi job build 3, ticket 17 5 ada, pop jobs, peek tickets, drain 2 (tickets) o sizes, stampa ogni risposta e infine urgent: seguito dai job e dai ticket urgenti ancora in coda.
Il tuo codice va inserito in TaskQueue.kt, Prioritized.kt, Job.kt e Ticket.kt. Main.kt contiene il codice di input/output fornito e non può essere modificato.
Provalo tu
fun main() {
// Codice di input/output fornito: lascialo così com'è
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)}")
}
Tutte le lezioni di Programmazione orientata agli oggetti
1Classi e oggetti
Lavorare con i fileDefinire le classiCostruttori primariBlocchi init e convalidaCostruttori secondariRiepilogo - Tessera della biblioteca4Ereditarietà
Classi aperte e sottoclassiRidefinizione dei membrisuper e costruttoriClassi astratteRiepilogo - Elenco del personale2Proprietà e incapsulamento
Accessor personalizzatiModificatori di visibilitàSetter privatilazy e lateinitRipasso - Conto bancario5Interfacce
Dichiarare le interfacceMetodi predefinitiInterfacce multipleLe interfacce come tipiRiepilogo - Metodi di pagamento8Tipi generici
Funzioni genericheClassi genericheVincoli sui tipiVarianza con in e outRiepilogo - Coda con priorità11Progetto: Gestione della biblioteca
Libri e sociPrendere in prestito i libriEsercitati da solo: Playground Kotlin