Menu
Coddy logo textTech

Agendador de Eventos

Parte da seção Programação Orientada a Objetos do Journey de R da Coddy. Lição 56 de 57.

challenge icon

Desafio

Difícil

Crie um agendador de eventos usando dois arquivos.

  • Event.R: a classe S3 event com os campos title, day, start, end (horas). Escreva new_event(); validate_event(), que interrompe a execução com day must be from 1 to 31 ou hours must be within 0 to 24 and start before end; o auxiliar event(title, day, start, end), que converte os argumentos de texto em números; format.event(), que retorna day 3 09-11 standup; e overlaps(a, b), TRUE quando dois eventos ocorrem no mesmo dia e cada um começa antes do término do outro.
  • Scheduler.R: make_scheduler() mantém seus eventos privados e retorna add(e), que responde duplicate para o mesmo título no mesmo dia, conflicts with review quando o evento se sobrepõe a um evento existente, ou added; agenda(), os eventos formatados ordenados por dia, início e título; e busiest_day(), busiest: day 3 (4 hours) pelo total de horas (o dia anterior em caso de empate), ou no events.

Use call. = FALSE. O código fornecido lê linhas title,day,start,end, imprime a resposta para cada uma e, em seguida, a agenda e o dia mais ocupado.

Seu código deve ficar em Event.R e Scheduler.R. main.R contém o código fornecido de entrada/saída e não pode ser editado.

Experimente você mesmo

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

# Código de entrada/saída fornecido: mantenha-o 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 as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de R online