Planowanie wydarzeń
Część sekcji Programowanie obiektowe ścieżki R w Coddy. Lekcja 56 z 57.
Wyzwanie
TrudnyZbuduj planer wydarzeń w dwóch plikach.
Event.R: klasa S3eventz polamititle,day,start,end(godziny). Napisznew_event();validate_event(), które zatrzymuje działanie z komunikatemday must be from 1 to 31lubhours 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 zwracaday 3 09-11 standup; orazoverlaps(a, b), która zwracaTRUE, 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 zwracaadd(e), która zwracaduplicate, gdy tytuł i dzień są takie same,conflicts with review, gdy wydarzenie nakłada się na istniejące, lubadded;agenda()zwracającą sformatowane wydarzenia posortowane według dnia, godziny rozpoczęcia i tytułu; orazbusiest_day(), zwracającąbusiest: day 3 (4 hours)na podstawie łącznej liczby godzin (w przypadku remisu wybierz wcześniejszy dzień) lubno 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
1Podstawy S3
Praca z plikamiListy z klasąFunkcje konstruktoraMetody print i formatWalidatory i funkcje pomocniczePowtórzenie — temperatury4Enkapsulacja w R
Domknięcia jako obiektyŚrodowiska jako obiektyFunkcje dostępoweOchrona stanuPodsumowanie – parkometr2Generics i metody S3
Generics i UseMethodMetody domyślneMetody dla podstawowych genericsPodstawy NextMethodPowtórzenie — pola figur5Klasy S4
Definiowanie klas S4Sloty i dostępSprawdzanie poprawnościMetody wyświetlaniaPodsumowanie – katalog produktów8Klasy referencyjne
Definiowanie klas referencyjnychMetody i aktualizacja pólSemantyka kopiowaniaDziedziczenie i callSuperPodsumowanie – kolejka zadań11Projekt: Zarządzanie biblioteką
Książki i czytelnicyWypożyczanie książek3Dziedziczenie S3
Wektory klasKolejność wyszukiwania metodRozszerzanie za pomocą NextMethodSprawdzanie za pomocą inherits()Powtórzenie — lista płac pracownikówPoćwicz samodzielnie: Kompilator R online