Menu
Coddy logo textTech

Planificateur d’événements

Fait partie de la section Programmation orientée objet du Journey R de Coddy. Leçon 56 sur 57.

challenge icon

Défi

Difficile

Construisez un planificateur d’événements réparti sur deux fichiers.

  • Event.R : la classe S3 event avec les champs title, day, start, end (heures). Écrivez new_event() ; validate_event(), qui s’arrête avec day must be from 1 to 31 ou hours must be within 0 to 24 and start before end ; l’utilitaire event(title, day, start, end), qui convertit les arguments textuels en nombres ; format.event(), qui renvoie day 3 09-11 standup ; et overlaps(a, b), TRUE lorsque deux événements ont lieu le même jour et que chacun commence avant la fin de l’autre.
  • Scheduler.R : make_scheduler() conserve ses événements privés et renvoie add(e), qui répond duplicate pour le même titre le même jour, conflicts with review lorsque l’événement chevauche un événement existant, ou added ; agenda(), les événements formatés triés par jour, heure de début et titre ; et busiest_day(), busiest: day 3 (4 hours) selon le nombre total d’heures (le jour le plus tôt en cas d’égalité), ou no events.

Utilisez call. = FALSE. Le code fourni lit les lignes title,day,start,end, affiche la réponse pour chacune, puis l’agenda et le jour le plus chargé.

Votre code doit être placé dans Event.R et Scheduler.R. main.R contient le code fourni d’entrée/sortie et ne peut pas être modifié.

Essayez vous-même

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

# Code d'entrée/sortie fourni : le garder tel quel
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 = "")

Toutes les leçons de Programmation orientée objet

Entraînez-vous par vous-même : Compilateur R en ligne