Menu
Coddy logo textTech

Riepilogo - coda di attività

Fa parte della sezione Programmazione orientata agli oggetti del percorso R di Coddy. Lezione 41 di 57.

challenge icon

Sfida

Medio

Crea una coda di attività usando due classi di riferimento. Entrambe le definizioni sono racchiuse in suppressMessages().

  • Task in Task.R: campi title, priority (numerico) e done (logico); initialize imposta done su FALSE quando non viene specificato; label() restituisce [x] fix (3) per un'attività completata oppure [ ] fix (3).
  • TaskQueue in TaskQueue.R: il campo tasks (una list); add(title, priority) aggiunge una nuova Task e restituisce invisible(.self); next_task() restituisce il titolo dell'attività aperta con la priorità più alta (in caso di parità, quella aggiunta per prima), oppure nothing; complete(title) contrassegna come completata la prima attività aperta con quel titolo e restituisce TRUE, oppure FALSE; report() restituisce un'etichetta per ogni attività nell'ordine in cui è stata aggiunta, poi open: 2.

Il codice fornito legge add fix 3, next e done fix, poi aggiunge due attività con un'unica chiamata concatenata e stampa il report.

Il tuo codice va inserito in Task.R e TaskQueue.R. main.R contiene il codice di input/output fornito e non può essere modificato.

Provalo tu

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

# Codice di input/output fornito: lascialo così com'è
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())

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore R online