מתזמן אירועים
חלק מהיחידה תכנות מונחה עצמים במסלול ה-R של Coddy. שיעור 56 מתוך 57.
אתגר
קשהבנו מתזמן אירועים בשני קבצים.
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 = "")
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות S3
עבודה עם קבציםרשימות עם מחלקהפונקציות בנאימתודות print ו-formatמאמתים ופונקציות עזרחזרה – טמפרטורותתרגלו בעצמכם: קומפיילר R אונליין