Easy 0 solved 0% acceptance

Count Log Levels

Read the lines of a log file and count how many are INFO, WARNING and ERROR.

What you'll learn

  • Process a file line by line
  • Take the first word of a line
  • Count categories with a small tally

Problem

Programs write log files with one event per line. Each line starts with a level word followed by a space and a message, for example ERROR disk full.

Given the lines of a log file, count the lines whose first word is exactly INFO, WARNING or ERROR. Lines that start with anything else (including lowercase levels) are ignored.

Implement count_log_levels(lines).

Input

lines: The lines of the file, without line breaks.

Output

Return [info_count, warning_count, error_count].

Constraints

0 ≤ number of lines ≤ 10,000

Each line has at most 200 characters

Examples

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

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

Expected output:
std::vector<long long> expected = {2, 1, 1};
Input:
string[] lines = new string[] {"INFO server started", "ERROR disk full", "INFO user login", "WARNING slow query"};

Expected output:
long[] expected = new long[] {2, 1, 1};

Explanation

Two lines start with INFO, one with WARNING and one with ERROR: [2, 1, 1].

Example 2
Input:
lines = ["info lowercase", "DEBUG details", "ERROR"]

Expected output:
expected = [0, 0, 1]
Input:
std::vector<std::string> lines = {"info lowercase", "DEBUG details", "ERROR"};

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

Expected output:
long[] expected = new long[] {0, 0, 1};

Explanation

"info" is not "INFO" and DEBUG is not counted. The last line is just the word ERROR, which counts: [0, 0, 1].

How to approach it

Try on your own first, then open one hint at a time.

Hint 1

Only the first word of each line matters.

Hint 2

Split once at the first space and compare that word exactly.

Hint 3

Case matters: "info" is not "INFO", and a line can be just the level word.

Expected complexity

O(total length) time, O(1) extra space

References

This challenge is adapted for CodeUtility. Follow the statement and constraints above.

Learn from others

Community solutions

No published solutions yet. Solve this challenge to share the first one.