Menu
CoddyTech

Penjadwal Acara

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

challenge icon

Tantangan

Sulit

Buat penjadwal acara dalam dua file.

  • Event.R: class S3 event dengan field title, day, start, end (jam). Tulis new_event(); validate_event(), yang menghentikan proses dengan day must be from 1 to 31 atau hours must be within 0 to 24 and start before end; helper event(title, day, start, end), yang mengonversi argumen teks menjadi angka; format.event(), yang menghasilkan day 3 09-11 standup; dan overlaps(a, b), yang menghasilkan TRUE saat dua acara berlangsung pada hari yang sama dan masing-masing dimulai sebelum acara lainnya berakhir.
  • Scheduler.R: make_scheduler() menyimpan acara secara privat dan mengembalikan add(e), yang membalas duplicate untuk judul yang sama pada hari yang sama, conflicts with review saat acara tersebut bertumpang tindih dengan acara yang sudah ada, atau added; agenda(), yang menghasilkan acara berformat dan diurutkan berdasarkan hari, waktu mulai, lalu judul; serta busiest_day(), yang menghasilkan busiest: day 3 (4 hours) berdasarkan total jam (hari yang lebih awal jika seri), atau no events.

Gunakan call. = FALSE. Kode yang disediakan membaca baris title,day,start,end, mencetak balasan untuk setiap baris, lalu agenda dan hari tersibuk.

Tulis kodemu di Event.R dan Scheduler.R. main.R berisi kode input/output yang disediakan dan tidak boleh diedit.

Coba sendiri

source("Event.R")
source("Scheduler.R")

# Kode input/output yang disediakan: biarkan apa adanya
input <- suppressWarnings(readLines(file("stdin")))
s <- make_scheduler()
for (line in input) {
  p <- strsplit(line, ",")[[1]]
  reply <- tryCatch(s$add(event(p[1], p[2], p[3], p[4])), error = function(e) paste("invalid:", conditionMessage(e)))
  cat(p[1], ": ", reply, "\n", sep = "")
}
cat("agenda:\n")
for (l in s$agenda()) cat("  ", l, "\n", sep = "")
cat(s$busiest_day(), "\n", sep = "")

Semua pelajaran di Pemrograman Berorientasi Object

Latihan sendiri: Compiler R online