Menu
Coddy logo textTech

Programador de eventos

Parte de la sección Programación orientada a objetos del Journey de R de Coddy. Lección 56 de 57.

challenge icon

Desafío

Difícil

Construye un programador de eventos en dos archivos.

  • Event.R: la clase S3 event con los campos title, day, start, end (horas). Escribe new_event(); validate_event(), que se detiene con day must be from 1 to 31 o hours must be within 0 to 24 and start before end; el auxiliar event(title, day, start, end), que convierte los argumentos de texto en números; format.event(), que devuelve day 3 09-11 standup; y overlaps(a, b), TRUE cuando dos eventos ocurren el mismo día y cada uno comienza antes de que termine el otro.
  • Scheduler.R: make_scheduler() mantiene sus eventos privados y devuelve add(e), que responde duplicate para el mismo título el mismo día, conflicts with review cuando el evento se superpone a uno existente, o added; agenda(), los eventos formateados ordenados por día, hora de inicio y título; y busiest_day(), busiest: day 3 (4 hours) según el total de horas (el día anterior en caso de empate), o no events.

Usa call. = FALSE. El código proporcionado lee líneas title,day,start,end, imprime la respuesta para cada una y, después, la agenda y el día con más actividad.

Tu código debe ir en Event.R y Scheduler.R. main.R contiene el código proporcionado de entrada/salida y no se puede editar.

Pruébalo tú mismo

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

# Código de entrada/salida suministrado: déjalo tal como está
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 = "")

Todas las lecciones de Programación orientada a objetos

Practica por tu cuenta: Compilador de R online