Menu
CoddyTech

Penjadwal Acara

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Kotlin di Coddy. Pelajaran 56 dari 57.

challenge icon

Tantangan

Sulit

Buat scheduler acara.

  • Event(title, day, start, end) (jam dari 0 hingga 24) adalah class yang mengimplementasikan Comparable<Event>, diurutkan berdasarkan day, lalu start, lalu title. Dua acara dianggap sama jika title dan day-nya cocok (acara yang sama dimasukkan dua kali), jadi timpa equals dan hashCode berdasarkan kedua property tersebut. Acara dicetak sebagai day 3 09-11 standup, dengan jam dua digit. overlaps(other) bernilai true pada day yang sama jika waktu mulai masing-masing acara sebelum waktu berakhir acara lainnya.
  • Scheduler.add(event) memberikan balasan invalid: standup jika acara tidak berakhir setelah waktu mulainya, duplicate untuk acara yang sama, conflicts with review untuk acara pertama yang bertumpang tindih dalam urutan agenda, atau added.
  • agenda() mengembalikan acara yang sudah diurutkan, dan busiestDay() mengembalikan busiest day 3: 5h untuk day dengan jam terjadwal terbanyak (jika seri, pilih day yang lebih awal), atau no events.

Kode yang disediakan membaca acara dari baris berformat title,day,start,end, mencetak balasan untuk setiap acara, lalu agenda (satu acara per baris) dan day tersibuk.

Tulis kodemu di Event.kt dan Scheduler.kt. Main.kt berisi kode input/output yang disediakan dan tidak boleh diedit.

Coba sendiri

fun main() {
    // Kode input/output yang disediakan: biarkan apa adanya
    val input = generateSequence(::readLine).toList()
    val scheduler = Scheduler()
    for (line in input) {
        val p = line.split(",")
        println(scheduler.add(Event(p[0], p[1].toInt(), p[2].toInt(), p[3].toInt())))
    }
    for (e in scheduler.agenda()) println(e)
    println(scheduler.busiestDay())
}

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Playground Kotlin