Menu
Coddy logo textTech

Zusammenfassung – Aufgabenwarteschlange

Teil des Abschnitts Objektorientierte Programmierung der R-Journey von Coddy. Lektion 41 von 57.

challenge icon

Aufgabe

Mittel

Erstelle eine Aufgabenwarteschlange aus zwei Referenzklassen. Beide Definitionen sind in suppressMessages() eingeschlossen.

  • Task in Task.R: die Felder title, priority (numerisch) und done (logisch); initialize setzt done auf FALSE, wenn es nicht angegeben wurde; label() gibt für eine erledigte Aufgabe [x] fix (3) oder [ ] fix (3) zurück.
  • TaskQueue in TaskQueue.R: das Feld tasks (eine list); add(title, priority) fügt ein neues Task hinzu und gibt invisible(.self) zurück; next_task() gibt den Titel der offenen Aufgabe mit der höchsten Priorität zurück (bei Gleichstand die zuerst hinzugefügte) oder nothing; complete(title) markiert die erste offene Aufgabe mit diesem Titel als erledigt und gibt TRUE oder FALSE zurück; report() gibt ein Label pro Aufgabe in der Reihenfolge ihrer Hinzufügung und anschließend open: 2 zurück.

Der bereitgestellte Code liest add fix 3, next und done fix ein, fügt anschließend in einem verketteten Aufruf zwei Aufgaben hinzu und gibt den Bericht aus.

Dein Code gehört in Task.R und TaskQueue.R. main.R enthält den bereitgestellten Eingabe-/Ausgabecode und darf nicht bearbeitet werden.

Probier es selbst

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

# Gelieferter Ein-/Ausgabecode: belasse ihn wie er ist
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())

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-R-Compiler