Log Line Counter

Log Line Counter

Hard PHP PHP Error Handling 28 views
Explanation Complexity

Problem Statement

Each non-empty line should look like LEVEL:message. LEVEL is INFO, WARN, or ERROR. Count each level and also count invalid lines. Print: info warn error invalid.

Input Format

Multiple lines (may include empty lines).

Output Format

Four integers: info warn error invalid.

Example

INFO:Start
WARN:Low disk
BAD LINE
ERROR:Oops
INFO:Done
2 1 1 1

Constraints

Total text

Input / Output Format

Input Format
Multiple lines (may include empty lines).
Output Format
Four integers: info warn error invalid.
Constraints
Total text

Examples

Input:
INFO:Start WARN:Low disk BAD LINE ERROR:Oops INFO:Done
Output:
2 1 1 1

Example Solution (Public)

PHP
<?php
$inputText=stream_get_contents(STDIN);
$inputLines=preg_split('/\\R/', $inputText);
$counts=['INFO'=>0,'WARN'=>0,'ERROR'=>0];
$invalid=0;
foreach($inputLines as $line){
  $line=trim($line);
  if($line==='') continue;
  $colonPos=strpos($line,':');
  if($colonPos===false || $colonPos===0){
    $invalid++;
    continue;
  }
  $level=substr($line,0,$colonPos);
  if(isset($counts[$level])) $counts[$level]++;
  else $invalid++;
}
echo $counts['INFO'].' '.$counts['WARN'].' '.$counts['ERROR'].' '.$invalid;
?>

Official Solution Code

<?php
$inputText=stream_get_contents(STDIN);
$inputLines=preg_split('/\\R/', $inputText);
$counts=['INFO'=>0,'WARN'=>0,'ERROR'=>0];
$invalid=0;
foreach($inputLines as $line){
  $line=trim($line);
  if($line==='') continue;
  $colonPos=strpos($line,':');
  if($colonPos===false || $colonPos===0){
    $invalid++;
    continue;
  }
  $level=substr($line,0,$colonPos);
  if(isset($counts[$level])) $counts[$level]++;
  else $invalid++;
}
echo $counts['INFO'].' '.$counts['WARN'].' '.$counts['ERROR'].' '.$invalid;
?>
Please login to submit solutions.
Editor
Output

                                        
Please login to submit solutions.