Retour aux défis
Facile 0 résolus 0 % de réussite

Compter les niveaux de log

Lisez les lignes d'un fichier de log et comptez combien sont INFO, WARNING et ERROR.

Ce que vous allez apprendre

  • Traiter un fichier ligne par ligne
  • Prendre le premier mot d'une ligne
  • Compter des catégories avec un petit décompte

Problème

Les programmes écrivent des fichiers de log avec un événement par ligne. Chaque ligne commence par un mot de niveau, suivi d'un espace et d'un message, par exemple ERROR disk full.

Étant donné les lignes d'un fichier de log, comptez les lignes dont le premier mot est exactement INFO, WARNING ou ERROR. Les lignes qui commencent par autre chose (y compris des niveaux en minuscules) sont ignorées.

Implémentez count_log_levels(lines).

Input

lines: Les lignes du fichier, sans les sauts de ligne.

Output

Retournez [info_count, warning_count, error_count].

Contraintes

0 ≤ nombre de lignes ≤ 10,000

Chaque ligne a au plus 200 caractères

Exemples

Exemple 1
Entrée :
lines = ["INFO server started", "ERROR disk full", "INFO user login", "WARNING slow query"]

Sortie attendue :
expected = [2, 1, 1]
Entrée :
std::vector<std::string> lines = {"INFO server started", "ERROR disk full", "INFO user login", "WARNING slow query"};

Sortie attendue :
std::vector<long long> expected = {2, 1, 1};
Entrée :
string[] lines = new string[] {"INFO server started", "ERROR disk full", "INFO user login", "WARNING slow query"};

Sortie attendue :
long[] expected = new long[] {2, 1, 1};

Explication

Deux lignes commencent par INFO, une par WARNING et une par ERROR : [2, 1, 1].

Exemple 2
Entrée :
lines = ["info lowercase", "DEBUG details", "ERROR"]

Sortie attendue :
expected = [0, 0, 1]
Entrée :
std::vector<std::string> lines = {"info lowercase", "DEBUG details", "ERROR"};

Sortie attendue :
std::vector<long long> expected = {0, 0, 1};
Entrée :
string[] lines = new string[] {"info lowercase", "DEBUG details", "ERROR"};

Sortie attendue :
long[] expected = new long[] {0, 0, 1};

Explication

"info" n'est pas "INFO" et DEBUG n'est pas compté. La dernière ligne est juste le mot ERROR, qui compte : [0, 0, 1].

Comment l'aborder

Essayez d'abord seul, puis ouvrez les indices un par un.

Indice 1

Seul le premier mot de chaque ligne compte.

Indice 2

Coupez une seule fois au premier espace et comparez ce mot exactement.

Indice 3

La casse compte : "info" n'est pas "INFO", et une ligne peut ne contenir que le mot du niveau.

Complexité attendue

temps O(longueur totale), espace supplémentaire O(1)

Références

Ce défi a été adapté pour CodeUtility. Suivez l'énoncé et les contraintes ci-dessus.

Apprenez des autres

Solutions de la communauté

Aucune solution publiée pour l'instant. Résolvez ce défi pour partager la première.