Menu
CoddyTech

Mencatat Pengeluaran

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

Dalam proyek ini, kamu membangun pencatat pengeluaran yang membaca perintah, satu per baris. Dalam lima langkah, program ini belajar mencatat pengeluaran, melaporkan total, mengelompokkan pengeluaran berdasarkan kategori, mencantumkan pengeluaran terbesar, dan merangkum satu bulan. Setiap langkah mengembangkan fungsi tracker(commands) yang sama.

ADD 2024-05-01 food 12.50
ADD 2024-05-02 rent 500
TOTAL
CATEGORY
TOP 2
MONTH 2024-05

Pengeluaran tersimpan dalam data frame dengan satu baris untuk setiap pengeluaran. Data frame ini dimulai dengan tiga kolom kosong yang bertipe tepat, lalu rbind() menambahkan satu baris untuk setiap ADD yang valid:

expenses <- data.frame(date = character(0), category = character(0), amount = numeric(0))
expenses <- rbind(expenses, data.frame(date = "2024-05-01", category = "food", amount = 12.5))
print(nrow(expenses))
print(expenses$amount)

Output:

[1] 1
[1] 12.5

Baris ADD harus memiliki empat bagian dan jumlah positif. Ubah jumlah tersebut dengan suppressWarnings(as.numeric()) agar nilai yang tidak valid menghasilkan NA, bukan peringatan, lalu periksa sebelum menambahkan baris:

parts <- strsplit("ADD 2024-05-01 food abc", " ")[[1]]
amount <- suppressWarnings(as.numeric(parts[4]))
print(length(parts) == 4 && !is.na(amount) && amount > 0)

Output:

[1] FALSE
challenge icon

Tantangan

Mudah

Lengkapi tracker(commands) untuk perintah pertama:

  • ADD <date> <category> <amount>: jika baris tersebut memiliki tepat empat bagian dan jumlahnya adalah angka yang lebih besar dari 0, tambahkan pengeluaran tersebut dan berikan balasan added <category> <amount> dengan jumlah hingga dua angka desimal, seperti added food 12.50. Jika tidak, berikan balasan invalid: diikuti seluruh perintah.

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 berhuruf kecil, dan input hanya berisi perintah yang telah 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]]
    # Tulis kodemu di sini
  }
  replies
}

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

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler R online