Shadowing Counter

Shadowing Counter

Medium PHP PHP Variables 13 views
Explanation Complexity

Problem Statement

Commands: LET x, BEGIN, END. Count how many LET shadows a name already present in an outer scope.

Input Format

First line q. Next q lines.

Output Format

One integer count.

Example

7
LET a
BEGIN
LET a
LET b
BEGIN
LET b
END
2

Constraints

q

Input / Output Format

Input Format
First line q. Next q lines.
Output Format
One integer count.
Constraints
q

Examples

Input:
7 LET a BEGIN LET a LET b BEGIN LET b END
Output:
2

Example Solution (Public)

PHP
<?php
$inputLines=preg_split('/\\R/', trim(stream_get_contents(STDIN)));
if(!$inputLines || trim($inputLines[0])==='') exit;
$q=intval($inputLines[0]);
$stack=[[]];
$ans=0;
for($i=1;$i<=$q;$i++){
  $t=trim($inputLines[$i] ?? '');
  if($t==='') continue;
  if($t==='BEGIN'){ $stack[]=[]; continue; }
  if($t==='END'){ if(count($stack)>1) array_pop($stack); continue; }
  $tokens=preg_split('/\\s+/', $t);
  if(($tokens[0] ?? '')!=='LET') continue;
  $name=$tokens[1] ?? '';
  $shadow=false;
  for($s=count($stack)-2;$s>=0;$s--){
    if(array_key_exists($name,$stack[$s])){ $shadow=true; break; }
  }
  if($shadow) $ans++;
  $stack[count($stack)-1][$name]=true;
}
echo $ans;
?>

Official Solution Code

<?php
$inputLines=preg_split('/\\R/', trim(stream_get_contents(STDIN)));
if(!$inputLines || trim($inputLines[0])==='') exit;
$q=intval($inputLines[0]);
$stack=[[]];
$ans=0;
for($i=1;$i<=$q;$i++){
  $t=trim($inputLines[$i] ?? '');
  if($t==='') continue;
  if($t==='BEGIN'){ $stack[]=[]; continue; }
  if($t==='END'){ if(count($stack)>1) array_pop($stack); continue; }
  $tokens=preg_split('/\\s+/', $t);
  if(($tokens[0] ?? '')!=='LET') continue;
  $name=$tokens[1] ?? '';
  $shadow=false;
  for($s=count($stack)-2;$s>=0;$s--){
    if(array_key_exists($name,$stack[$s])){ $shadow=true; break; }
  }
  if($shadow) $ans++;
  $stack[count($stack)-1][$name]=true;
}
echo $ans;
?>
Please login to submit solutions.
Editor
Output

                                        
Please login to submit solutions.