Agendador de Eventos
Parte da seção Programação Orientada a Objetos do Journey de R da Coddy. Lição 56 de 57.
Desafio
DifícilCrie um agendador de eventos usando dois arquivos.
Event.R: a classe S3eventcom os campostitle,day,start,end(horas). Escrevanew_event();validate_event(), que interrompe a execução comday must be from 1 to 31ouhours must be within 0 to 24 and start before end; o auxiliarevent(title, day, start, end), que converte os argumentos de texto em números;format.event(), que retornaday 3 09-11 standup; eoverlaps(a, b),TRUEquando 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 retornaadd(e), que respondeduplicatepara o mesmo título no mesmo dia,conflicts with reviewquando o evento se sobrepõe a um evento existente, ouadded;agenda(), os eventos formatados ordenados por dia, início e título; ebusiest_day(),busiest: day 3 (4 hours)pelo total de horas (o dia anterior em caso de empate), ouno 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
1Fundamentos do S3
Trabalhando com ArquivosListas com uma ClasseFunções ConstrutorasMétodos de Impressão e FormataçãoValidadores e AuxiliaresRevisão - Temperaturas4Encapsulamento em R
Closures como ObjetosAmbientes como ObjetosFunções de AcessoProtegendo o EstadoRecapitulação - Parquímetro2Genéricos e Métodos S3
Genéricos e UseMethodMétodos padrãoMétodos para genéricos baseFundamentos de NextMethodRevisão - Áreas de formas5Classes S4
Definindo classes S4Slots e acessoVerificações de validadeMétodos showRevisão - Catálogo de produtos8Classes de Referência
Definindo Classes de ReferênciaMétodos e Atualizações de CamposSemântica de CópiaHerança e callSuperRecapitulação — Fila de Tarefas11Projeto: Gerenciamento de Biblioteca
Livros e MembrosEmpréstimo de LivrosPratique por conta própria: Compilador de R online