Menu
Coddy logo textTech

복습 - 작업 큐

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

challenge icon

챌린지

중급

두 개의 Reference Class를 사용하여 작업 큐를 만드세요. 두 정의 모두 suppressMessages()로 감싸져 있습니다.

  • Task (Task.R에 있음): title, priority(numeric), done(logical) 필드; initialize은 done이 지정되지 않았을 때 FALSE로 설정합니다. label()은 완료된 작업에 대해 [x] fix (3)을, 그렇지 않으면 [ ] fix (3)을 반환합니다.
  • TaskQueue (TaskQueue.R에 있음): tasks 필드(list); add(title, priority)는 새 Task를 추가하고 invisible(.self)를 반환합니다. next_task()는 우선순위가 가장 높은 미완료 작업의 제목(동률이면 먼저 추가된 작업)을 반환하며, 해당 작업이 없으면 nothing을 반환합니다. complete(title)은 해당 제목을 가진 첫 번째 미완료 작업을 완료 상태로 표시하고 TRUE를 반환하며, 해당 작업이 없으면 FALSE를 반환합니다. report()는 추가된 순서대로 작업별 레이블 하나씩을 반환한 다음 open: 2를 반환합니다.

제공된 코드는 add fix 3, next, done fix를 읽은 다음, 연결된 하나의 호출로 작업 두 개를 추가하고 보고서를 출력합니다.

코드는 Task.R과 TaskQueue.R에 작성합니다. main.R에는 제공된 입력/출력 코드가 들어 있으며 편집할 수 없습니다.

직접 해보기

source("Task.R")
source("TaskQueue.R")

# 제공된 입출력 코드: 있는 그대로 유지하세요
input <- suppressWarnings(readLines(file("stdin")))
q <- TaskQueue$new()
for (line in input) {
  p <- strsplit(line, " ")[[1]]
  if (p[1] == "add") {
    q$add(p[2], as.numeric(p[3]))
  } else if (p[1] == "next") {
    cat("next: ", q$next_task(), "\n", sep = "")
  } else if (p[1] == "done") {
    cat(if (q$complete(p[2])) "completed " else "no open task ", p[2], "\n", sep = "")
  }
}
q$add("late", 1)$add("later", 1)
writeLines(q$report())

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: 온라인 R 컴파일러