Advertisement
Guest User

Untitled

a guest
Dec 14th, 2023
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function isDigit (s: string): boolean {
  2.     return ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"].includes(s);
  3. }
  4.  
  5. function calculateSimpleInfix (queue: string[]): number {
  6.     let result = 0;
  7.     for (let i = 0; i < queue.length; i++) {
  8.         const token = queue[i];
  9.         if (token === "-") {
  10.             result -= Number(queue[i + 1]);
  11.             i += 1;
  12.             continue;
  13.         }
  14.         if (token === "+") {
  15.             continue;
  16.         }
  17.         result += Number (token);
  18.     }
  19.     return result;
  20. }
  21.  
  22. function calculate(s: string): number {
  23.     const stack = [];
  24.     for (let i = 0; i < s.length; i++) {
  25.         // Read token.
  26.         let token = s[i];
  27.         while (isDigit (s[i]) && isDigit (s[i + 1])) {
  28.             i += 1;
  29.             token += s[i];
  30.         }
  31.         if (token === " ") {
  32.             continue;
  33.         }
  34.  
  35.         if (token !== ")") {
  36.             stack.push(token);
  37.         }
  38.         if (token === ")" || i === s.length - 1) {
  39.             // evaluate expression until we meet an open bracket
  40.             const evaluateQueue = [];
  41.             while (true) {
  42.                 const simpleToken = stack.pop();
  43.                 if (simpleToken === "(" || simpleToken === undefined) {
  44.                     break;
  45.                 }
  46.                 evaluateQueue.push(simpleToken);
  47.             }
  48.             evaluateQueue.reverse();
  49.             stack.push(calculateSimpleInfix(evaluateQueue));
  50.             continue;
  51.         }
  52.     }
  53.  
  54.     return Number(calculateSimpleInfix(stack));
  55. };
  56.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement