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 אונליין