Menu
Coddy logo textTech

Récapitulatif - Parcmètre

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

challenge icon

Défi

Moyen

Complétez la fabrique make_meter(rate) dans Meter.R. rate est le nombre de minutes qu'achète un centime ; verrouillez-le avec lockBinding() à l'intérieur de la fabrique afin qu'il ne puisse jamais changer. Le compteur conserve les minutes restantes et les centimes payés en tant que variables privées et renvoie quatre fonctions :

  • insert(cents) n'accepte que 10, 20, 50 ou 100 et s'arrête sinon avec coin not accepted ; chaque pièce ajoute cents * rate minutes et est comptabilisée dans le montant payé.
  • wait(minutes) laisse le temps s'écouler : le nombre de minutes restantes diminue, mais ne descend jamais en dessous de 0. Une attente négative s'arrête avec time cannot go back.
  • status() renvoie 12 min left, ou expired lorsqu'il ne reste plus de temps.
  • paid() renvoie le nombre de centimes payés.

Utilisez call. = FALSE. Le code fourni lit le tarif, puis les lignes coin 20 ou wait 5, et affiche l'état ou error: ainsi que le message après chacune d'elles. Enfin, il affiche le montant payé et tente de modifier rate dans l'environnement de la fabrique.

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

Essayez vous-même

source("Meter.R")

# Code d'entrée/sortie fourni : le garder tel quel
input <- suppressWarnings(readLines(file("stdin")))
meter <- make_meter(as.numeric(input[1]))
for (line in input[-1]) {
  p <- strsplit(line, " ")[[1]]
  msg <- tryCatch({
    if (p[1] == "coin") meter$insert(as.numeric(p[2]))
    if (p[1] == "wait") meter$wait(as.numeric(p[2]))
    meter$status()
  }, error = function(e) paste("error:", conditionMessage(e)))
  cat(line, ": ", msg, "\n", sep = "")
}
cat("paid: ", meter$paid(), " cents\n", sep = "")
r <- tryCatch({ environment(meter$insert)$rate <- 0; "rate changed" }, error = function(e) "rate is locked")
cat(r, "\n", sep = "")

Toutes les leçons de Programmation orientée objet

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