Planificateur d’événements
Fait partie de la section Programmation orientée objet du Journey R de Coddy. Leçon 56 sur 57.
Défi
DifficileConstruisez un planificateur d’événements réparti sur deux fichiers.
Event.R: la classe S3eventavec les champstitle,day,start,end(heures). Écriveznew_event();validate_event(), qui s’arrête avecday must be from 1 to 31ouhours must be within 0 to 24 and start before end; l’utilitaireevent(title, day, start, end), qui convertit les arguments textuels en nombres ;format.event(), qui renvoieday 3 09-11 standup; etoverlaps(a, b),TRUElorsque 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 renvoieadd(e), qui répondduplicatepour le même titre le même jour,conflicts with reviewlorsque l’événement chevauche un événement existant, ouadded;agenda(), les événements formatés triés par jour, heure de début et titre ; etbusiest_day(),busiest: day 3 (4 hours)selon le nombre total d’heures (le jour le plus tôt en cas d’égalité), ouno 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
1Bases de S3
Travailler avec les fichiersListes avec une classeFonctions constructricesMéthodes print et formatValidateurs et fonctions utilitairesRécapitulatif - Températures4Encapsulation dans R
Les fermetures comme objetsLes environnements comme objetsFonctions d’accèsProtéger l’étatRécapitulatif - Parcmètre2S3 : génériques et méthodes
Génériques et UseMethodMéthodes par défautMéthodes pour les génériques de baseNotions de base sur NextMethodRécapitulatif - Aires des formes5Classes S4
Définir des classes S4Slots et accèsVérifications de validitéMéthodes showRécapitulatif - Catalogue de produits8Classes de référence
Définition des classes de référenceMéthodes et mises à jour des champsSémantique de copieHéritage et callSuperRécapitulatif - File d’attente des tâches11Projet : gestion de bibliothèque
Livres et membresEmprunter des livres3Héritage S3
Vecteurs de classesOrdre de recherche des méthodesÉtendre avec NextMethodVérifier avec inherits()Récapitulatif - Paie du personnelEntraînez-vous par vous-même : Compilateur R en ligne