Планировщик мероприятий
Часть раздела Объектно-ориентированное программирование путешествия по Kotlin на Coddy. Урок 56 из 57.
Задание
СложноСоздайте планировщик событий.
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())
}
Все уроки раздела Объектно-ориентированное программирование
1Классы и объекты
Работа с файламиОпределение классовПервичные конструкторыБлоки init и валидацияВторичные конструкторыПовторение — читательский билет4Наследование
Открытые классы и подклассыПереопределение членовsuper и конструкторыАбстрактные классыПовторение — каталог сотрудников7Специальные классы
Классы данныхКлассы перечисленийЗапечатанные иерархииequals, hashCode, toStringПовторение — трекер заказов10Паттерны проектирования. Часть 2
Делегирование с помощью byПаттерн декораторПаттерн строительПаттерн состояние2Свойства и инкапсуляция
Пользовательские аксессорыМодификаторы видимостиПриватные сеттерыlazy и lateinitПовторение — банковский счёт5Интерфейсы
Объявление интерфейсовМетоды по умолчаниюМножественные интерфейсыИнтерфейсы как типыПовторение — способы оплаты8Обобщения
Обобщённые функцииОбобщённые классыОграничения типовВариативность с in и outПовторение — очередь с приоритетом11Проект: Управление библиотекой
Книги и читателиВыдача книг3Объекты и компаньоны
Объявления объектовОбъекты-компаньоныКонстанты с constОбъектные выраженияПовторение — билетная касса6Полиморфизм
Динамическая диспетчеризацияПроверка типов и умные приведения типовwhen с типамиФункции-расширенияПовторение — смотритель зоопарка9Паттерны проектирования. Часть 1
Паттерн «Одиночка»Фабричный паттернПаттерн «Наблюдатель»Паттерн «Стратегия»Потренируйтесь самостоятельно: Песочница Kotlin