Todos los desafíos
Fácil 0 resueltos 0% de aceptación

Contar niveles de log

Lee las líneas de un archivo de registro y cuenta cuántas son INFO, WARNING y ERROR.

Lo que aprenderás

  • Procesar un archivo línea a línea
  • Tomar la primera palabra de una línea
  • Contar categorías con un pequeño recuento

Problema

Ver original (inglés)

Los programas escriben archivos de registro con un evento por línea. Cada línea empieza con una palabra de nivel seguida de un espacio y un mensaje, por ejemplo ERROR disk full.

Dadas las líneas de un archivo de registro, cuenta las líneas cuyo primer palabra es exactamente INFO, WARNING o ERROR. Las líneas que empiezan con cualquier otra cosa (incluidos los niveles en minúsculas) se ignoran.

Implementa count_log_levels(lines).

Entrada

lines: Las líneas del archivo, sin saltos de línea.

Salida

Devuelve [info_count, warning_count, error_count].

Restricciones

0 ≤ número de líneas ≤ 10,000

Cada línea tiene como máximo 200 caracteres

Ejemplos

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

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

Salida 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"};

Salida esperada:
long[] expected = new long[] {2, 1, 1};

Explicación

Dos líneas empiezan con INFO, una con WARNING y una con ERROR: [2, 1, 1].

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

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

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

Salida esperada:
long[] expected = new long[] {0, 0, 1};

Explicación

"info" no es "INFO" y DEBUG no se cuenta. La última línea es solo la palabra ERROR, que sí cuenta: [0, 0, 1].

Cómo abordarlo

Inténtalo primero por tu cuenta y luego abre las pistas una a una.

Pista 1

Solo importa la primera palabra de cada línea.

Pista 2

Divide una sola vez en el primer espacio y compara esa palabra exactamente.

Pista 3

Las mayúsculas importan: "info" no es "INFO", y una línea puede ser solo la palabra del nivel.

Complejidad esperada

tiempo O(longitud total), espacio extra O(1)

Referencias

Este reto está adaptado para CodeUtility. Sigue el enunciado y las restricciones indicadas arriba.

Aprende de otros

Soluciones de la comunidad

Aún no hay soluciones publicadas. Resuelve este reto para compartir la primera.