Menu
CoddyTech

Pengeluaran per Kategori

Termasuk bagian Logika dan Alur dalam perjalanan R di Coddy. Pelajaran 59 dari 64.

challenge icon

Tantangan

Mudah

Tambahkan perintah CATEGORY. Pastikan semua perintah dari langkah sebelumnya tetap berfungsi persis seperti sebelumnya.

  • CATEGORY: balas dengan satu baris untuk setiap kategori dalam urutan alfabetis, food: 20.50, dengan total kategori ditampilkan hingga dua angka desimal. Jika belum ada yang tercatat, balas no expenses.

Satu perintah CATEGORY menghasilkan beberapa balasan, dan setiap balasan dicetak pada barisnya sendiri.

Kode yang disediakan meneruskan setiap baris input ke tracker() sebagai satu perintah dan mencetak setiap balasan yang dikembalikan pada barisnya sendiri. Tanggal ditulis dalam format YYYY-MM-DD, kategori berupa kata-kata huruf kecil, dan input hanya berisi perintah yang sudah dijelaskan sejauh ini.

Coba sendiri

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
}

# Kode input/output yang disediakan: biarkan apa adanya
input <- suppressWarnings(readLines(file("stdin")))
cat(tracker(input), sep = "\n")

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler R online