Evaluate Reverse Polish Notation

MediumArrayMathStack

Solution

export function evalRPN(tokens: string[]): number {
  const stack: number[] = [];
  for (const token of tokens) {
    if (isNumber(token)) {
      stack.push(parseInt(token));
    } else {
      const b = stack.pop();
      const a = stack.pop();
      stack.push(evalute(a, b, token));
    }
  }
 
  return stack[0];
}
 
function isNumber(token: string) {
  return /^-*\d+$/.test(token);
}
 
function evalute(a: number | undefined, b: number | undefined, op: string) {
  if (a === undefined || b === undefined) {
    return 0;
  }
  switch (op) {
    case '+':
      return a + b;
    case '-':
      return a - b;
 
    case '*':
      return a * b;
    case '/':
      return Math.trunc(a / b);
  }
  return 0;
}