Menu
CoddyTech

Ôn tập: hàng đợi tác vụ

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 41 trên 57.

challenge icon

Thử thách

Trung bình

Xây dựng hàng đợi tác vụ từ hai lớp tham chiếu. Cả hai định nghĩa đều được bao bọc trong suppressMessages().

  • Task trong Task.R: các trường title, priority (kiểu số) và done (kiểu logic); initialize đặt done thành FALSE khi giá trị này không được cung cấp; label() trả về [x] fix (3) cho tác vụ đã hoàn thành hoặc [ ] fix (3).
  • TaskQueue trong TaskQueue.R: trường tasks (một list); add(title, priority) thêm một Task mới vào cuối danh sách và trả về invisible(.self); next_task() trả về tiêu đề của tác vụ đang mở có mức ưu tiên cao nhất (nếu bằng nhau thì chọn tác vụ được thêm sớm nhất), hoặc nothing; complete(title) đánh dấu tác vụ đang mở đầu tiên có tiêu đề đó là đã hoàn thành và trả về TRUE, hoặc FALSE; report() trả về nhãn của từng tác vụ theo thứ tự được thêm vào, sau đó là open: 2.

Code được cung cấp đọc add fix 3, next và done fix, sau đó thêm hai tác vụ trong một lời gọi nối chuỗi rồi in báo cáo.

Code của bạn nằm trong Task.R và TaskQueue.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("Task.R")
source("TaskQueue.R")

# Đoạn code đầu vào/đầu ra đã được cung cấp: giữ nguyên đoạn này
input <- suppressWarnings(readLines(file("stdin")))
q <- TaskQueue$new()
for (line in input) {
  p <- strsplit(line, " ")[[1]]
  if (p[1] == "add") {
    q$add(p[2], as.numeric(p[3]))
  } else if (p[1] == "next") {
    cat("next: ", q$next_task(), "\n", sep = "")
  } else if (p[1] == "done") {
    cat(if (q$complete(p[2])) "completed " else "no open task ", p[2], "\n", sep = "")
  }
}
q$add("late", 1)$add("later", 1)
writeLines(q$report())

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