Menu
Coddy logo textTech

Повторение — очередь задач

Часть раздела Объектно-ориентированное программирование путешествия по R на Coddy. Урок 41 из 57.

challenge icon

Задание

Средне

Создайте очередь задач с использованием двух Reference-классов. Оба определения обёрнуты в suppressMessages().

  • Task в Task.R: поля title, priority (числовое) и done (логическое); 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