Menu
CoddyTech

Lịch sự kiện

Thuộc phần Lập trình hướng đối tượng trong hành trình R của Coddy. Bài học 56 trên 57.

challenge icon

Thử thách

Khó

Xây dựng bộ lập lịch sự kiện trong hai tệp.

  • Event.R: lớp S3 event với các trường title, day, start, end (giờ). Viết new_event(); validate_event(), hàm này dừng và báo day must be from 1 to 31 hoặc hours must be within 0 to 24 and start before end; hàm hỗ trợ event(title, day, start, end), chuyển các đối số dạng văn bản thành số; format.event(), hàm này trả về day 3 09-11 standup; và overlaps(a, b), trả về TRUE khi hai sự kiện diễn ra cùng ngày và mỗi sự kiện bắt đầu trước khi sự kiện kia kết thúc.
  • Scheduler.R: make_scheduler() giữ các sự kiện ở phạm vi riêng tư và trả về add(e), hàm này phản hồi duplicate nếu có cùng tiêu đề trong cùng ngày, conflicts with review nếu sự kiện trùng với một sự kiện đã có, hoặc added; agenda(), trả về danh sách các sự kiện đã định dạng, được sắp xếp theo ngày, giờ bắt đầu và tiêu đề; và busiest_day(), trả về busiest: day 3 (4 hours) dựa trên tổng số giờ (nếu hòa, chọn ngày sớm hơn), hoặc no events.

Dùng call. = FALSE. Code được cung cấp đọc các dòng theo định dạng title,day,start,end, in phản hồi cho từng dòng, sau đó in lịch trình và ngày bận nhất.

Đặt code của bạn trong Event.R và Scheduler.R. main.R chứa code đầu vào/đầu ra được cung cấp và bạn không thể chỉnh sửa tệp này.

Tự làm thử

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

# Đoạn code đầu vào/đầu ra đã cung cấp: giữ nguyên
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 = "")

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch R online