أكبر النفقات
جزء من قسم المنطق وتدفق التنفيذ في رحلة R على Coddy. الدرس 60 من 64.
التحدي
متوسطأضف الأمر TOP. حافظ على عمل كل أمر من الخطوات السابقة تمامًا كما كان من قبل.
TOP <n>: أجب بأكبرnمن النفقات، كل واحدة في سطر، بدءًا من الأكبر، بالتنسيق2024-05-02 rent 500.00. تُدرج النفقات ذات المبلغ نفسه حسب التاريخ، من الأقدم أولًا. إذا كان عدد النفقات أقل منn، فأدرجها كلها؛ وإذا لم توجد أي نفقات، فأجبno expenses.
يمرر الكود المُقدَّم كل سطر إدخال إلى 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)))
} else if (parts[1] == "CATEGORY") {
if (nrow(expenses) == 0) {
replies <- c(replies, "no expenses")
} else {
totals <- tapply(expenses$amount, expenses$category, sum)
replies <- c(replies, sprintf("%s: %.2f", names(totals), totals))
}
}
}
replies
}
# كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
input <- suppressWarnings(readLines(file("stdin")))
cat(tracker(input), sep = "\n")
جميع دروس المنطق وتدفق التنفيذ
1السلاسل النصية بعمق
السلاسل الفرعية باستخدام substr()التنسيق باستخدام sprintf()التقسيم والضمالبحث في السلاسل النصيةاستبدال النصوصمراجعة - منشئ اسم المستخدم4المصفوفات
إنشاء المصفوفاتفهرسة المصفوفاتملخصات الصفوف والأعمدةالحساب على المصفوفاتمراجعة - مخطط المقاعد2استرجاع القيم باستخدام المفاتيح
البحث في المتجهات المُسمّاةالتحقق من المفاتيحإضافة المفاتيح وإزالتهاالتكرار عبر الأسماءمراجعة - مكتب الأسهمتدرّب بنفسك: مترجم R عبر الإنترنت