이벤트 일정 관리
Coddy R 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 57개 중 56번째.
챌린지
어려움두 파일에 걸쳐 이벤트 스케줄러를 작성하세요.
Event.R:title,day,start,end(시간) 필드를 사용하는 S3 클래스event를 작성하세요.new_event()를 작성하고,day must be from 1 to 31또는hours must be within 0 to 24 and start before end와 함께 중단되는validate_event()를 작성하세요. 또한 텍스트 인수를 숫자로 변환하는 도우미event(title, day, start, end),day 3 09-11 standup을 반환하는format.event(), 그리고 두 이벤트가 같은 날에 있고 각각 다른 이벤트의 종료 시각보다 먼저 시작할 때TRUE를 반환하는overlaps(a, b)를 작성하세요.Scheduler.R:make_scheduler()는 이벤트를 비공개로 유지하고 다음을 반환합니다. 같은 날 같은 제목이면duplicate, 해당 이벤트가 기존 이벤트와 겹치면conflicts with review, 그 외에는added를 반환하는add(e); 일, 시작 시각, 제목 순으로 정렬된 형식화된 이벤트를 반환하는agenda(); 그리고 총시간을 기준으로busiest: day 3 (4 hours)를 반환하는busiest_day()(동률이면 더 이른 날을 선택) 또는 이벤트가 없으면no events를 반환합니다.
call. = FALSE를 사용하세요. 제공된 코드는 title,day,start,end 형식의 줄을 읽고, 각 줄의 응답을 출력한 다음 아젠다와 가장 바쁜 날을 출력합니다.
코드는 Event.R과 Scheduler.R에 작성하세요. main.R에는 제공된 입력/출력 코드가 있으며 수정할 수 없습니다.
직접 해보기
source("Event.R")
source("Scheduler.R")
# 제공된 입력/출력 코드: 그대로 유지하세요
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 = "")
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 R 컴파일러