Menu
Coddy logo textTech

Özet - Parkmetre

Coddy'nin R Journey'sinin Nesne Tabanlı Programlama bölümünün bir parçası. Ders 21 / 57.

challenge icon

Görev

Orta

make_meter(rate) fabrikasını Meter.R içinde tamamla. rate, bir centin satın aldığı dakika sayısıdır; değişmemesi için fabrika içinde lockBinding() ile kilitle. Sayaç, kalan dakikaları ve ödenen centleri özel değişkenler olarak tutar ve dört fonksiyon döndürür:

  • insert(cents) yalnızca 10, 20, 50 veya 100 değerlerini kabul eder; diğer durumlarda coin not accepted ile durur. Her bozuk para cents * rate dakika ekler ve ödenen miktara dahil edilir.
  • wait(minutes) zamanın geçmesini sağlar: kalan dakika azalır, ancak hiçbir zaman 0'ın altına inmez. Negatif bir bekleme time cannot go back ile durur.
  • status(), 12 min left döndürür; hiç zaman kalmadığında ise expired döndürür.
  • paid(), ödenen centleri döndürür.

call. = FALSE kullan. Sağlanan kod rate değerini okur, ardından coin 20 veya wait 5 satırlarını işler ve her birinden sonra durumu ya da error: ile mesajı yazdırır. Son olarak ödenen miktarı yazdırır ve fabrika ortamının içinde rate değerini değiştirmeyi dener.

Kodun Meter.R içine yazılmalı. main.R, sağlanan giriş/çıkış kodunu içerir ve düzenlenemez.

Kendin dene

source("Meter.R")

# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
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 = "")

Nesne Tabanlı Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online R derleyicisi