Menu
Coddy logo textTech

Repaso: parquímetro

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

challenge icon

Desafío

Intermedio

Completa la fábrica make_meter(rate) en Meter.R. rate es el número de minutos que compra un centavo; bloquéalo con lockBinding() dentro de la fábrica para que nunca pueda cambiar. El medidor mantiene los minutos restantes y los centavos pagados como variables privadas y devuelve cuatro funciones:

  • insert(cents) acepta únicamente 10, 20, 50 o 100 y, de lo contrario, se detiene con coin not accepted; cada moneda añade cents * rate minutos y cuenta para el importe pagado.
  • wait(minutes) permite que pase el tiempo: los minutos restantes disminuyen, pero nunca por debajo de 0. Una espera negativa se detiene con time cannot go back.
  • status() devuelve 12 min left o expired cuando no queda tiempo.
  • paid() devuelve los centavos pagados.

Usa call. = FALSE. El código proporcionado lee la tarifa, después las líneas coin 20 o wait 5, e imprime el estado o error: y el mensaje después de cada una. Finalmente imprime el importe pagado e intenta cambiar rate dentro del entorno de la fábrica.

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

Pruébalo tú mismo

source("Meter.R")

# Código de entrada/salida suministrado: déjalo tal como está
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 = "")

Todas las lecciones de Programación orientada a objetos

Practica por tu cuenta: Compilador de R online