Menu
CoddyTech

Rangkuman: Meter Parkir

Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan R di Coddy. Pelajaran 21 dari 57.

challenge icon

Tantangan

Sedang

Lengkapi factory make_meter(rate) di Meter.R. rate adalah jumlah menit yang dibeli dengan satu sen. Kunci nilainya dengan lockBinding() di dalam factory agar tidak pernah berubah. Meter menyimpan sisa menit dan jumlah sen yang dibayarkan sebagai variabel privat, lalu mengembalikan empat fungsi:

  • insert(cents) hanya menerima 10, 20, 50, atau 100. Jika tidak, fungsi ini berhenti dengan coin not accepted. Setiap koin menambahkan cents * rate menit dan menambah jumlah yang dibayarkan.
  • wait(minutes) membiarkan waktu berlalu: sisa menit berkurang, tetapi tidak pernah kurang dari 0. Waktu tunggu negatif membuat fungsi ini berhenti dengan time cannot go back.
  • status() mengembalikan 12 min left, atau expired jika tidak ada waktu tersisa.
  • paid() mengembalikan jumlah sen yang dibayarkan.

Gunakan call. = FALSE. Kode yang disediakan membaca rate, lalu baris seperti coin 20 atau wait 5, kemudian mencetak status atau error: dan pesannya setelah setiap baris. Terakhir, kode mencetak jumlah yang dibayarkan dan mencoba mengubah rate di dalam environment factory.

Tulis kodemu di Meter.R. main.R berisi kode input/output yang disediakan dan tidak dapat diedit.

Coba sendiri

source("Meter.R")

# Kode input/output yang disediakan: biarkan apa adanya
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 = "")

Semua pelajaran di Pemrograman Berorientasi Object

Latihan sendiri: Compiler R online