update RPN solver
This commit is contained in:
@ -1,32 +1,21 @@
|
|||||||
### RPNSolver
|
### RPNSolver
|
||||||
|
|
||||||
Solves the given reverse polish notation
|
Solves the given reverse polish notation
|
||||||
```js
|
|
||||||
|
``` js
|
||||||
const RPNSolver = RPN => {
|
const RPNSolver = RPN => {
|
||||||
const isNumeric = str => !isNaN(parseFloat(str)) && isFinite(str);
|
const operators = {'*' : (a,b) => a * b, '+' : (a,b) => a + b, '-' : (a,b) => a - b, '/' : (a,b) => a / b, '**': (a,b) => a ** b}
|
||||||
const isOperator = str => ['*','-','+','/','**'].includes(str)
|
let [stack,solve] = [[],RPN.replace(/\^/g,'**').split(/\s+/g).filter(el => !/\s+/.test(el) && el !== '')]
|
||||||
let stack = [];
|
|
||||||
let solve = RPN.replace(/\^/g,'**').split(/\s+/g);
|
|
||||||
solve.forEach(symbol => {
|
solve.forEach(symbol => {
|
||||||
if(isNumeric(symbol)) {stack.push(symbol)}
|
if(!isNaN(parseFloat(symbol)) && isFinite(symbol)) {stack.push(symbol)}
|
||||||
else if (isOperator(symbol)){
|
else if (Object.keys(operators).includes(symbol)) {
|
||||||
a = stack.pop();
|
let [a,b] = [stack.pop(),stack.pop()]
|
||||||
b = stack.pop();
|
stack.push(operators[symbol](parseFloat(b),parseFloat(a)))
|
||||||
if(symbol === "+") {
|
} else { throw `${symbol} is not a recognized symbol` }
|
||||||
stack.push(parseFloat(a) + parseFloat(b));
|
|
||||||
} else if(symbol === "-") {
|
|
||||||
stack.push(parseFloat(b) - parseFloat(a));
|
|
||||||
} else if(symbol === "*") {
|
|
||||||
stack.push(parseFloat(a) * parseFloat(b));
|
|
||||||
} else if(symbol === "/") {
|
|
||||||
stack.push(parseFloat(b) / parseFloat(a));
|
|
||||||
} else if(symbol === "**") {
|
|
||||||
stack.push(parseFloat(a) ** parseFloat(b));
|
|
||||||
}
|
|
||||||
} else { console.log('Wrong RPN')}
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
return stack.length === 1 ? stack.pop : console.log("error")
|
if(stack.length === 1) return stack.pop()
|
||||||
|
else throw `${RPN} is not a proper RPN. Please check it and try again`
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user