Menu
Coddy logo textTech

Планировщик мероприятий

Часть раздела Объектно-ориентированное программирование путешествия по Kotlin на Coddy. Урок 56 из 57.

challenge icon

Задание

Сложно

Создайте планировщик событий.

  • Event(title, day, start, end) (часы от 0 до 24) — это класс, реализующий Comparable<Event>, упорядоченный по дню, затем по времени начала, затем по названию. Два события считаются равными, когда совпадают их название и день (одно и то же событие введено дважды), поэтому переопределите equals и hashCode для этих двух свойств. Оно выводится в виде day 3 09-11 standup, с часами в двузначном формате. overlaps(other) имеет значение true в один и тот же день, когда каждое событие начинается раньше окончания другого.
  • Scheduler.add(event) возвращает invalid: standup, если событие не заканчивается после своего начала, duplicate для равного события, conflicts with review для первого пересекающегося события в порядке расписания или added.
  • agenda() возвращает отсортированные события, а busiestDay() возвращает busiest day 3: 5h для дня с наибольшим количеством запланированных часов (при равенстве — более ранний день) или no events.

Предоставленный код считывает события в виде строк title,day,start,end, выводит ответ для каждого из них, затем расписание (по одному событию в строке) и самый загруженный день.

Ваш код должен находиться в Event.kt и Scheduler.kt. В Main.kt содержится предоставленный код ввода/вывода, и его нельзя изменять.

Попробуйте сами

fun main() {
    // Предоставленный код ввода/вывода: оставьте его как есть
    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())
}

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Песочница Kotlin