Menu
Coddy logo textTech

Ausgaben nach Kategorie

Teil des Abschnitts Logik und Ablaufsteuerung der R-Journey von Coddy. Lektion 59 von 64.

challenge icon

Aufgabe

Einfach

Füge den Befehl CATEGORY hinzu. Lass jeden Befehl aus den vorherigen Schritten weiterhin genau wie zuvor funktionieren.

  • CATEGORY: Antworte mit einer Zeile pro Kategorie in alphabetischer Reihenfolge, food: 20.50, wobei die Summe der Kategorie auf zwei Dezimalstellen gerundet ist. Wenn nichts erfasst wurde, antworte mit no expenses.

Ein CATEGORY-Befehl erzeugt mehrere Antworten, und jede wird in einer eigenen Zeile ausgegeben.

Der bereitgestellte Code übergibt jede Eingabezeile als einen Befehl an tracker() und gibt jede zurückgegebene Antwort in einer eigenen Zeile aus. Datumsangaben werden als YYYY-MM-DD geschrieben, Kategorien sind kleingeschriebene Wörter, und die Eingabe enthält nur die bisher beschriebenen Befehle.

Probier es selbst

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
}

# Bereitgestellter Ein-/Ausgabecode: belasse ihn wie er ist
input <- suppressWarnings(readLines(file("stdin")))
cat(tracker(input), sep = "\n")

Alle Lektionen in Logik und Ablaufsteuerung

Übe selbstständig: Online-R-Compiler