Планировщик мероприятий
Часть раздела Объектно-ориентированное программирование путешествия по R на Coddy. Урок 56 из 57.
Задание
СложноСоздайте планировщик событий в двух файлах.
Event.R: класс S3eventс полямиtitle,day,start,end(часы). Напишитеnew_event();validate_event(), которая завершает выполнение с сообщениемday must be from 1 to 31илиhours must be within 0 to 24 and start before end; вспомогательную функциюevent(title, day, start, end), которая преобразует текстовые аргументы в числа;format.event(), которая возвращаетday 3 09-11 standup; иoverlaps(a, b), возвращающуюTRUE, когда два события проходят в один и тот же день и каждое из них начинается раньше окончания другого.Scheduler.R:make_scheduler()хранит свои события в закрытой области видимости и возвращаетadd(e), которая отвечаетduplicateдля одинакового названия в один и тот же день,conflicts with review, когда событие пересекается с существующим, илиadded;agenda()— отформатированные события, отсортированные по дню, времени начала и названию; иbusiest_day()—busiest: day 3 (4 hours)по общему количеству часов (при равенстве выбирается более ранний день) илиno events.
Используйте call. = FALSE. Предоставленный код считывает строки title,day,start,end, выводит ответ для каждой из них, затем расписание и самый загруженный день.
Ваш код должен находиться в Event.R и Scheduler.R. В main.R находится предоставленный код ввода/вывода, и его нельзя редактировать.
Попробуйте сами
source("Event.R")
source("Scheduler.R")
# Предоставленный код ввода/вывода: оставьте его как есть
input <- suppressWarnings(readLines(file("stdin")))
s <- make_scheduler()
for (line in input) {
p <- strsplit(line, ",")[[1]]
reply <- tryCatch(s$add(event(p[1], p[2], p[3], p[4])), error = function(e) paste("invalid:", conditionMessage(e)))
cat(p[1], ": ", reply, "\n", sep = "")
}
cat("agenda:\n")
for (l in s$agenda()) cat(" ", l, "\n", sep = "")
cat(s$busiest_day(), "\n", sep = "")
Все уроки раздела Объектно-ориентированное программирование
1Основы S3
Работа с файламиСписки с классомФункции-конструкторыМетоды print и formatВалидаторы и вспомогательные функцииПовторение — температуры4Инкапсуляция в R
Замыкания как объектыОкружения как объектыФункции доступаЗащита состоянияПовторение — парковочный счётчик7S4 Наследование
Расширение с помощью containscallNextMethodВиртуальные классыПроверка типов с помощью is()Повторение — смотритель зоопарка10Шаблоны проектирования, часть 2
Шаблон «Декоратор»Шаблон «Строитель»Шаблон «Состояние»Шаблон «Итератор»2Обобщённые функции и методы S3
Обобщённые функции и UseMethodМетоды по умолчаниюМетоды для базовых обобщённых функцийОсновы NextMethodПовторение — площади фигур5Классы S4
Определение классов S4Слоты и доступПроверка корректностиМетоды showПовторение — каталог товаров8Ссылочные классы
Определение ссылочных классовМетоды и обновление полейСемантика копированияНаследование и callSuperПовторение — очередь задач11Проект: Управление библиотекой
Книги и читателиВыдача книг3Наследование S3
Векторы классовПорядок поиска методовРасширение с помощью NextMethodПроверка с помощью inherits()Повторение — расчёт зарплаты сотрудниковПотренируйтесь самостоятельно: Онлайн-компилятор R