Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function isDigit (s: string): boolean {
- return ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"].includes(s);
- }
- function calculateSimpleInfix (queue: string[]): number {
- let result = 0;
- for (let i = 0; i < queue.length; i++) {
- const token = queue[i];
- if (token === "-") {
- result -= Number(queue[i + 1]);
- i += 1;
- continue;
- }
- if (token === "+") {
- continue;
- }
- result += Number (token);
- }
- return result;
- }
- function calculate(s: string): number {
- const stack = [];
- for (let i = 0; i < s.length; i++) {
- // Read token.
- let token = s[i];
- while (isDigit (s[i]) && isDigit (s[i + 1])) {
- i += 1;
- token += s[i];
- }
- if (token === " ") {
- continue;
- }
- if (token !== ")") {
- stack.push(token);
- }
- if (token === ")" || i === s.length - 1) {
- // evaluate expression until we meet an open bracket
- const evaluateQueue = [];
- while (true) {
- const simpleToken = stack.pop();
- if (simpleToken === "(" || simpleToken === undefined) {
- break;
- }
- evaluateQueue.push(simpleToken);
- }
- evaluateQueue.reverse();
- stack.push(calculateSimpleInfix(evaluateQueue));
- continue;
- }
- }
- return Number(calculateSimpleInfix(stack));
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement