Menu
Coddy logo textTech

Tekrar - Öncelik Kuyruğu

Coddy'nin Kotlin Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 41 / 57.

challenge icon

Görev

Orta

Herhangi bir önceliklendirilmiş tür için çalışan bir öncelik kuyruğu oluşturun. Prioritized (priority ile birlikte) ve Job ile Ticket veri sınıfları sağlanmıştır.

  • TaskQueue<T : Prioritized>, en yüksek önceliğe sahip öğeyi (eşit öncelikler arasında ilk ekleneni) kaldıran veya döndüren push(item), pop() ve peek() işlevlerine ya da null'a, ayrıca size, items() (pop sırasındaki salt okunur bir anlık görüntü) ve en fazla n öğeyi pop edip bunları List<T> olarak döndüren drain(n) işlevlerine sahiptir.
  • Genel countUrgent(queue, min) işlevi, herhangi bir önceliklendirilmiş türdeki kuyruğu alır ve öğelerinden kaç tanesinin en az bu önceliğe sahip olduğunu döndürür.

Sağlanan kod job build 3, ticket 17 5 ada, pop jobs, peek tickets, drain 2 (tickets) veya sizes komutlarını okur, her yanıtı yazdırır ve son olarak hâlâ kuyrukta bulunan acil işlerin ve biletlerin sayısıyla birlikte urgent: ifadesini yazdırır.

Kodunuz TaskQueue.kt, Prioritized.kt, Job.kt ve Ticket.kt dosyalarına yazılmalıdır. Main.kt sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.

Kendin dene

fun main() {
    // Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
    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)}")
}

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Kotlin playground