Récapitulatif - File de priorité
Fait partie de la section Programmation orientée objet du Journey Kotlin de Coddy. Leçon 41 sur 57.
Défi
MoyenConstruisez une file de priorité qui fonctionne pour tout type priorisé. Prioritized (avec priority) et les classes de données Job et Ticket sont fournies.
TaskQueue<T : Prioritized>possèdepush(item),pop()etpeek(), qui suppriment ou renvoient l’élément ayant la priorité la plus élevée (celui ajouté en premier parmi les priorités égales) ounull,size,items()(un instantané en lecture seule dans l’ordre de retrait) etdrain(n), qui retire jusqu’ànéléments et les renvoie sous forme deList<T>.- La fonction générique
countUrgent(queue, min)prend une file de n’importe quel type priorisé et renvoie le nombre de ses éléments ayant au moins cette priorité.
Le code fourni lit les commandes job build 3, ticket 17 5 ada, pop jobs, peek tickets, drain 2 (tickets) ou sizes, affiche chaque réponse et affiche finalement urgent: avec les tâches et tickets urgents qui sont toujours dans les files.
Votre code doit être placé dans TaskQueue.kt, Prioritized.kt, Job.kt et Ticket.kt. Main.kt contient le code fourni pour les entrées et sorties et ne peut pas être modifié.
Essayez vous-même
fun main() {
// Code d'entrée/sortie fourni : le garder tel quel
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)}")
}
Toutes les leçons de Programmation orientée objet
1Classes et objets
Travailler avec des fichiersDéfinir des classesConstructeurs primairesBlocs init et validationConstructeurs secondairesRécapitulatif - Carte de bibliothèque4Héritage
Classes ouvertes et sous-classesRedéfinition des membressuper et constructeursClasses abstraitesRécapitulatif – Annuaire du personnel2Propriétés et encapsulation
Accesseurs personnalisésModificateurs de visibilitéSetters privéslazy et lateinitRécapitulatif - Compte bancaire5Interfaces
Déclarer des interfacesMéthodes par défautInterfaces multiplesInterfaces en tant que typesRécapitulatif - Méthodes de paiement8Génériques
Fonctions génériquesClasses génériquesContraintes de typeVariance avec in et outRécapitulatif - File de priorité11Projet : Gestion de bibliothèque
Livres et membresEmprunter des livresEntraînez-vous par vous-même : Playground Kotlin