Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مراجعة - قائمة المهام

جزء من قسم البرمجة كائنية التوجه في رحلة R على Coddy. الدرس 41 من 57.

challenge icon

التحدي

متوسط

أنشئ قائمة انتظار للمهام من صنفين مرجعيين. كلا التعريفين ملفوفان داخل suppressMessages().

  • Task في Task.R: الحقول title وpriority (رقمي) وdone (منطقي)؛ تجعل initialize قيمة done هي FALSE عندما لا يتم تقديمها؛ تُرجع label() القيمة [x] fix (3) للمهمة المكتملة أو [ ] fix (3).
  • TaskQueue في TaskQueue.R: الحقل tasks (وهو list)؛ تضيف add(title, priority) كائن Task جديدًا وتُرجع invisible(.self)؛ تُرجع next_task() عنوان المهمة المفتوحة ذات الأولوية الأعلى (والتي أُضيفت أولًا عند التعادل)، أو nothing؛ تضع complete(title) علامة الاكتمال على أول مهمة مفتوحة تحمل ذلك العنوان وتُرجع TRUE، أو FALSE؛ تُرجع report() تسمية واحدة لكل مهمة بترتيب الإضافة، ثم open: 2.

يقرأ الكود المُزوَّد add fix 3 وnext وdone fix، ثم يضيف مهمتين في استدعاء واحد متسلسل ويطبع التقرير.

ضع الكود الخاص بك في Task.R وTaskQueue.R. يحتوي main.R على كود الإدخال/الإخراج المُزوَّد ولا يمكن تعديله.

جرّب بنفسك

source("Task.R")
source("TaskQueue.R")

# كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
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())

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم R عبر الإنترنت