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

الإنفاق حسب الفئة

جزء من قسم المنطق وتدفق التنفيذ في رحلة R على Coddy. الدرس 59 من 64.

challenge icon

التحدي

سهل

أضف الأمر CATEGORY. حافظ على عمل كل أمر من الخطوات السابقة تمامًا كما كان من قبل.

  • CATEGORY: أعد سطرًا واحدًا لكل فئة بالترتيب الأبجدي، food: 20.50، مع إجمالي الفئة مقربًا إلى منزلتين عشريتين. عند عدم تسجيل أي شيء، أعد no expenses.

ينتج عن أمر CATEGORY واحد عدة ردود، ويُطبع كل رد في سطر مستقل.

يمرر الكود المزوَّد كل سطر إدخال إلى tracker() باعتباره أمرًا واحدًا، ويطبع كل رد مُعاد في سطر مستقل. تُكتب التواريخ بالتنسيق YYYY-MM-DD، وتكون الفئات كلمات بأحرف لاتينية صغيرة، ولا يحتوي الإدخال إلا على الأوامر الموضحة حتى الآن.

مخرَج الإخراج المطلوب: [المحتوى المترجم هنا]

جرّب بنفسك

tracker <- function(commands) {
  expenses <- data.frame(date = character(0), category = character(0), amount = numeric(0))
  replies <- c()
  for (cmd in commands) {
    parts <- strsplit(cmd, " ")[[1]]
    if (parts[1] == "ADD") {
      amount <- suppressWarnings(as.numeric(parts[4]))
      if (length(parts) != 4 || is.na(amount) || amount <= 0) {
        replies <- c(replies, paste("invalid:", cmd))
      } else {
        expenses <- rbind(expenses, data.frame(date = parts[2], category = parts[3], amount = amount))
        replies <- c(replies, sprintf("added %s %.2f", parts[3], amount))
      }
    } else if (parts[1] == "TOTAL") {
      replies <- c(replies, sprintf("total: %.2f, count: %d", sum(expenses$amount), nrow(expenses)))
    }
  }
  replies
}

# كود الإدخال/الإخراج المُقدَّم: اتركه كما هو
input <- suppressWarnings(readLines(file("stdin")))
cat(tracker(input), sep = "\n")

جميع دروس المنطق وتدفق التنفيذ

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