Планировщик мероприятий
Часть раздела Объектно-ориентированное программирование путешествия по Swift на Coddy. Урок 56 из 57.
Задание
СложноСоздайте планировщик событий со стандартными протоколами. Event — это структура с полями title, day (1-31), start и end, обозначающими часы. Она реализует Comparable (сначала по дню, затем по времени начала и затем по названию), Hashable и Equatable, сравнивая только название и день (одно и то же событие введено дважды), а также CustomStringConvertible, представляя событие в виде day 3 09-11 standup. Класс Scheduler имеет метод add(_:), который возвращает added, duplicate (то же название в тот же день) или conflicts with <title> (существующее событие в этот день, часы которого пересекаются с добавляемым: одно начинается до окончания другого). Метод agenda() возвращает отсортированные события, а busiestDay() возвращает busiest day 3: 5h или no events.
Предоставленный код считывает события в виде строк title,day,start,end и выводит ответ для каждого из них, затем расписание (по одному событию в строке) и самый загруженный день.
Ваш код должен находиться в Event.swift и Scheduler.swift. В main.swift содержится предоставленный код ввода/вывода, и его нельзя изменять.
Попробуйте сами
// Предоставленный код ввода/вывода: оставьте его как есть
var input: [String] = []
while let line = readLine() { input.append(line) }
let scheduler = Scheduler()
for line in input {
let p = line.split(separator: ",").map(String.init)
print(scheduler.add(Event(title: p[0], day: Int(p[1])!, start: Int(p[2])!, end: Int(p[3])!)))
}
for e in scheduler.agenda() { print(e) }
print(scheduler.busiestDay())
Все уроки раздела Объектно-ориентированное программирование
1Классы и объекты
Работа с файламиОпределение классовМетоды и selfИнициализаторыКлассы — это ссылкиПовторение — читательский билет4Инкапсуляция
Контроль доступаТолько чтение извнеЗащита состоянияИнициализаторы с возможностью сбояПовторение — банковский счёт7Полиморфизм и обобщения
ПолиморфизмПриведение типовОбобщённые функцииОбобщённые типыПовторение — калькулятор фигур10Паттерны проектирования. Часть 2
Паттерн делегированияПаттерн декораторПаттерн строительПаттерн состояния2Структуры и типы-значения
СтруктурыСемантика значенийИзменяющие методыСтруктура или классПовторение — элемент инвентаря5Наследование
ПодклассыПереопределение методовИнициализаторы и superfinal и иерархииПовторение — иерархия сотрудников8Стандартные протоколы
CustomStringConvertibleEquatableComparableHashableПовторение — пользовательская сортировка11Проект: Управление библиотекой
Книги и читателиВыдача книгПотренируйтесь самостоятельно: Песочница Swift