Menu
Coddy logo textTech

Repaso: cola de tareas

Parte de la sección Programación orientada a objetos del Journey de R de Coddy. Lección 41 de 57.

challenge icon

Desafío

Intermedio

Construye una cola de tareas a partir de dos clases de referencia. Ambas definiciones están envueltas en suppressMessages().

  • Task en Task.R: campos title, priority (numérico) y done (lógico); initialize hace que done sea FALSE cuando no se proporciona; label() devuelve [x] fix (3) para una tarea finalizada o [ ] fix (3).
  • TaskQueue en TaskQueue.R: el campo tasks (una list); add(title, priority) añade una nueva instancia de Task y devuelve invisible(.self); next_task() devuelve el título de la tarea abierta con la prioridad más alta (la añadida primero en caso de empate), o nothing; complete(title) marca como finalizada la primera tarea abierta con ese título y devuelve TRUE, o FALSE; report() devuelve una etiqueta por tarea en el orden en que se añadieron, después open: 2.

El código proporcionado lee add fix 3, next y done fix, después añade dos tareas en una llamada encadenada e imprime el informe.

Tu código va en Task.R y TaskQueue.R. main.R contiene el código de entrada/salida proporcionado y no se puede editar.

Pruébalo tú mismo

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

# Código de entrada/salida suministrado: mantenlo tal como está
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())

Todas las lecciones de Programación orientada a objetos

Practica por tu cuenta: Compilador de R online