Menu
Coddy logo textTech

이벤트 일정 관리

Coddy R 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 57개 중 56번째.

challenge icon

챌린지

어려움

두 파일에 걸쳐 이벤트 스케줄러를 작성하세요.

  • 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 컴파일러