Voltar para os desafios
Fácil 0 resolvidos 0% de aceitação

Contar níveis de log

Leia as linhas de um arquivo de log e conte quantas são INFO, WARNING e ERROR.

O que você vai aprender

  • Processar um arquivo linha por linha
  • Pegar a primeira palavra de uma linha
  • Contar categorias com uma pequena contagem

Problema

Ver original (inglês)

Programas escrevem arquivos de log com um evento por linha. Cada linha começa com uma palavra de nível seguida por um espaço e uma mensagem, por exemplo ERROR disk full.

Dadas as linhas de um arquivo de log, conte as linhas cujo primeiro termo é exatamente INFO, WARNING ou ERROR. Linhas que começam com qualquer outra coisa (incluindo níveis em minúsculas) são ignoradas.

Implemente count_log_levels(lines).

Input

lines: As linhas do arquivo, sem quebras de linha.

Output

Retorne [info_count, warning_count, error_count].

Restrições

0 ≤ número de linhas ≤ 10,000

Cada linha tem no máximo 200 caracteres

Exemplos

Exemplo 1
Entrada:
lines = ["INFO server started", "ERROR disk full", "INFO user login", "WARNING slow query"]

Saída esperada:
expected = [2, 1, 1]
Entrada:
std::vector<std::string> lines = {"INFO server started", "ERROR disk full", "INFO user login", "WARNING slow query"};

Saída esperada:
std::vector<long long> expected = {2, 1, 1};
Entrada:
string[] lines = new string[] {"INFO server started", "ERROR disk full", "INFO user login", "WARNING slow query"};

Saída esperada:
long[] expected = new long[] {2, 1, 1};

Explicação

Duas linhas começam com INFO, uma com WARNING e uma com ERROR: [2, 1, 1].

Exemplo 2
Entrada:
lines = ["info lowercase", "DEBUG details", "ERROR"]

Saída esperada:
expected = [0, 0, 1]
Entrada:
std::vector<std::string> lines = {"info lowercase", "DEBUG details", "ERROR"};

Saída esperada:
std::vector<long long> expected = {0, 0, 1};
Entrada:
string[] lines = new string[] {"info lowercase", "DEBUG details", "ERROR"};

Saída esperada:
long[] expected = new long[] {0, 0, 1};

Explicação

"info" não é "INFO" e DEBUG não é contado. A última linha é apenas a palavra ERROR, que conta: [0, 0, 1].

Como abordar

Tente sozinho primeiro e depois abra uma dica de cada vez.

Dica 1

Só a primeira palavra de cada linha importa.

Dica 2

Divida uma única vez no primeiro espaço e compare essa palavra exatamente.

Dica 3

Maiúsculas importam: "info" não é "INFO", e uma linha pode ter só a palavra do nível.

Complexidade esperada

tempo O(comprimento total), espaço extra O(1)

Referências

Este desafio foi adaptado para o CodeUtility. Siga o enunciado e as restrições acima.

Aprenda com outros

Soluções da comunidade

Ainda não há soluções publicadas. Resolva este desafio para compartilhar a primeira.