Menu
Coddy logo textTech

Récapitulatif - File d’attente des tâches

Fait partie de la section Programmation orientée objet du Journey R de Coddy. Leçon 41 sur 57.

challenge icon

Défi

Moyen

Construisez une file de tâches à partir de deux classes de référence. Les deux définitions sont enveloppées dans suppressMessages().

  • Task dans Task.R : champs title, priority (numérique) et done (logique) ; initialize définit done à FALSE lorsqu’il n’est pas fourni ; label() renvoie [x] fix (3) pour une tâche terminée ou [ ] fix (3).
  • TaskQueue dans TaskQueue.R : le champ tasks (une list) ; add(title, priority) ajoute une nouvelle Task et renvoie invisible(.self) ; next_task() renvoie le titre de la tâche ouverte ayant la priorité la plus élevée (la première ajoutée en cas d’égalité), ou nothing ; complete(title) marque comme terminée la première tâche ouverte portant ce titre et renvoie TRUE, ou FALSE ; report() renvoie une étiquette par tâche dans l’ordre d’ajout, puis open: 2.

Le code fourni lit add fix 3, next et done fix, puis ajoute deux tâches dans un appel chaîné et affiche le rapport.

Votre code doit être placé dans Task.R et TaskQueue.R. main.R contient le code d’entrée/sortie fourni et ne peut pas être modifié.

Essayez vous-même

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

# Code d'entrée/sortie fourni : le garder tel quel
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())

Toutes les leçons de Programmation orientée objet

Entraînez-vous par vous-même : Compilateur R en ligne