Menu
Coddy logo textTech

Dépenses par catégorie

Fait partie de la section Logique et flux d’exécution du Journey R de Coddy. Leçon 59 sur 64.

challenge icon

Défi

Facile

Ajoutez la commande CATEGORY. Veillez à ce que chaque commande des étapes précédentes continue de fonctionner exactement comme avant.

  • CATEGORY : répondre avec une ligne par catégorie, dans l’ordre alphabétique, food: 20.50, avec le total de la catégorie affiché avec deux décimales. Si rien n’est enregistré, répondre no expenses.

Une commande CATEGORY produit plusieurs réponses, chacune étant affichée sur sa propre ligne.

Le code fourni transmet chaque ligne d’entrée à tracker() comme une commande et affiche chaque réponse renvoyée sur sa propre ligne. Les dates sont écrites au format YYYY-MM-DD, les catégories sont des mots en minuscules, et l’entrée contient uniquement les commandes décrites jusqu’à présent.

Essayez vous-même

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
}

# Code d'entrée/sortie fourni : le garder tel quel
input <- suppressWarnings(readLines(file("stdin")))
cat(tracker(input), sep = "\n")

Toutes les leçons de Logique et flux d’exécution

Entraînez-vous par vous-même : Compilateur R en ligne