Menu
Coddy logo textTech

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

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

challenge icon

Задание

Сложно

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

  • Event.R: класс S3 event с полями 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 = "")

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

Потренируйтесь самостоятельно: Онлайн-компилятор R