Menu
Coddy logo textTech

Podsumowanie – kolejka zadań

Część sekcji Programowanie obiektowe ścieżki R w Coddy. Lekcja 41 z 57.

challenge icon

Wyzwanie

Średni

Zbuduj kolejkę zadań z dwóch klas referencyjnych. Obie definicje są opakowane w suppressMessages().

  • Task w pliku Task.R: pola title, priority (liczbowe) i done (logiczne); initialize ustawia done na FALSE, jeśli nie podano tej wartości; label() zwraca [x] fix (3) dla ukończonego zadania lub [ ] fix (3).
  • TaskQueue w pliku TaskQueue.R: pole tasks (lista list); add(title, priority) dodaje nowy obiekt Task i zwraca invisible(.self); next_task() zwraca tytuł otwartego zadania o najwyższym priorytecie (w przypadku remisu tego dodanego najwcześniej) lub nothing; complete(title) oznacza pierwsze otwarte zadanie o tym tytule jako ukończone i zwraca TRUE lub FALSE; report() zwraca etykietę każdego zadania w kolejności dodania, a następnie open: 2.

Dostarczony kod odczytuje add fix 3, next i done fix, następnie dodaje dwa zadania w jednym łańcuchowym wywołaniu i wyświetla raport.

Umieść swój kod w plikach Task.R i TaskQueue.R. Plik main.R zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.

Spróbuj swoich sił

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

# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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())

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator R online