Menu
Coddy logo textTech

Registro de Despesas

Parte da seção Lógica e Fluxo do Journey de R da Coddy. Lição 57 de 64.

Neste projeto, você criará um rastreador de despesas que lê comandos, um por linha. Ao longo de cinco etapas, ele aprende a registrar despesas, informar o total, agrupar os gastos por categoria, listar as maiores despesas e resumir um mês. Cada etapa estende a mesma função tracker(commands).

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

As despesas ficam em um data frame com uma linha por despesa. Ele começa com três colunas vazias dos tipos corretos, e rbind() adiciona uma linha para cada ADD válido:

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)

Saída:

[1] 1
[1] 12.5

Uma linha ADD deve ter quatro partes e um valor positivo. Converta o valor com suppressWarnings(as.numeric()) para que um valor inválido resulte em NA em vez de um aviso e, em seguida, verifique-o antes de adicionar a linha:

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

Saída:

[1] FALSE
challenge icon

Desafio

Fácil

Complete tracker(commands) para o primeiro comando:

  • ADD <date> <category> <amount>: se a linha tiver exatamente quatro partes e o valor for um número maior que 0, adicione a despesa e responda added <category> <amount> com o valor usando duas casas decimais, como em added food 12.50. Caso contrário, responda invalid: seguido pelo comando inteiro.

O código fornecido passa cada linha de entrada para tracker() como um comando e imprime cada resposta retornada em sua própria linha. As datas são escritas como YYYY-MM-DD, as categorias são palavras em minúsculas, e a entrada contém apenas os comandos descritos até agora.

Experimente você mesmo

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]]
    # Escreva seu código aqui
  }
  replies
}

# Código de entrada/saída fornecido: mantenha-o como está
input <- suppressWarnings(readLines(file("stdin")))
cat(tracker(input), sep = "\n")
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica e Fluxo

Pratique por conta própria: Compilador de R online