Menu
Coddy logo textTech

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

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

challenge icon

Задание

Сложно

Создайте планировщик событий со стандартными протоколами. 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())

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

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