<?php
$allowed_operators = array("*", "/", "^", "+", "-");
$rpn = "3 4 5 * -";
$rpnlen = strlen($rpn) - 1;
$stack = array();
function digit($char) {
return ctype_digit((string)$char);
}
//set_time_limit(2);
function r_old() {
global $pos, $rpn, $rpnlen, $stack, $allowed_operators, $result;
if($rpnlen <= $pos) return false;
$pos++;
if($rpn[$pos] != ' ') {
$tmp = "";
if(digit($rpn[$pos])) {
while(digit($rpn[$pos]) || $rpn[$pos] == ".") {
$tmp .= $rpn[$pos];
$pos++;
}
$pos--;
if (!empty($tmp))
array_push($stack, $tmp);
} else if(in_array($rpn[$pos], $allowed_operators)) {
$second = array_pop($stack); $first = array_pop($stack);
if($rpn[$pos] == '^')
$result = eval("return pow($first, $second);");
else
$result = eval("return ($first $rpn[$pos] $second);");
array_push($stack, $result);
return r_old();
}
else {
return r_old();
}
}
return r_old();
}
$result = 0;
$pos = 0;
function r() {
global $pos, $rpn, $rpnlen, $allowed_operators, $result, $stack;
while($rpn[$pos] == ' ')
$pos++;
if($rpnlen <= $pos) return false;
if(digit($rpn[$pos])) {
$tmp = "";
do {
$tmp .= $rpn[$pos];
$pos++;
}
while(digit($rpn[$pos]) || $rpn[$pos] == ".");
array_push($stack, $tmp);
} else if(in_array($rpn[$pos], $allowed_operators)) {
$second = array_pop($stack); $first = array_pop($stack);
if($rpn[$pos] == '^')
$result = eval("return pow($first, $second);");
else
$result = eval("return ($first $rpn[$pos] $second);");
//echo "return ($first $rpn[$pos] $second);";
array_push($stack, $result);
}
$pos++;
return r();
}
r();
//echo $result;
- Output for 4.3.0 - 4.3.11, 4.4.0 - 4.4.9, 5.0.0 - 5.0.5, 5.1.1 - 5.1.6, 5.2.0 - 5.2.17, 5.3.0 - 5.3.29, 5.4.0 - 5.4.45, 5.5.0 - 5.5.38, 5.6.0 - 5.6.40, 7.0.0 - 7.0.33, 7.1.0 - 7.1.33, 7.2.0 - 7.2.33, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.18, 8.3.0 - 8.3.6
- Output for 5.1.0
- Fatal error: fatal flex scanner internal error--end of buffer missed in /in/4Iibk on line 85
Process exited with code 255.
preferences:
300.4 ms | 401 KiB | 460 Q