Menu
Coddy logo textTech

Planowanie wydarzeń

Część sekcji Programowanie obiektowe ścieżki R w Coddy. Lekcja 56 z 57.

challenge icon

Wyzwanie

Trudny

Zbuduj planer wydarzeń w dwóch plikach.

  • Event.R: klasa S3 event z polami title, day, start, end (godziny). Napisz new_event(); validate_event(), które zatrzymuje działanie z komunikatem day must be from 1 to 31 lub hours must be within 0 to 24 and start before end; funkcję pomocniczą event(title, day, start, end), która konwertuje argumenty tekstowe na liczby; format.event(), która zwraca day 3 09-11 standup; oraz overlaps(a, b), która zwraca TRUE, gdy dwa wydarzenia są tego samego dnia i każde zaczyna się przed zakończeniem drugiego.
  • Scheduler.R: make_scheduler() przechowuje swoje wydarzenia prywatnie i zwraca add(e), która zwraca duplicate, gdy tytuł i dzień są takie same, conflicts with review, gdy wydarzenie nakłada się na istniejące, lub added; agenda() zwracającą sformatowane wydarzenia posortowane według dnia, godziny rozpoczęcia i tytułu; oraz busiest_day(), zwracającą busiest: day 3 (4 hours) na podstawie łącznej liczby godzin (w przypadku remisu wybierz wcześniejszy dzień) lub no events.

Użyj call. = FALSE. Dostarczony kod odczytuje wiersze w formacie title,day,start,end, wypisuje odpowiedź dla każdego z nich, a następnie agendę i najbardziej zajęty dzień.

Umieść swój kod w plikach Event.R i Scheduler.R. Plik main.R zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.

Spróbuj swoich sił

source("Event.R")
source("Scheduler.R")

# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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 = "")

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator R online