39 lines
1.1 KiB
Markdown
39 lines
1.1 KiB
Markdown
### postfixToInfix
|
|
|
|
This one has few errors and does not work properply
|
|
|
|
```js
|
|
const postfixToInfix = RPN => {
|
|
let convert = RPN.replace(/\^/g,'**').split(/\s+/g).filter(el => !/\s+/.test(el) && el !== '')
|
|
let stack = []
|
|
let result = []
|
|
let friends = {"+" : ["+","-","*","/"],"-":[],"/":["*"],"*":["/","*"],"**":["+","-","*","/"]}
|
|
convert.forEach(symbol => {
|
|
if(!isNaN(parseFloat(symbol)) && isFinite(symbol)){
|
|
result.push(symbol)
|
|
}
|
|
else if (Object.keys(friends).includes(symbol)) {
|
|
a = result.pop()
|
|
b = result.pop()
|
|
if(stack.length !==0){
|
|
if(friends[symbol].includes(stack.pop())){
|
|
result.push(`${b} ${symbol} ${a}`)
|
|
stack.push(symbol)
|
|
}
|
|
else{
|
|
result.push(`(${b}) ${symbol} ${a}`)
|
|
stack.push(symbol)
|
|
}
|
|
}
|
|
else {result.push(`${b} ${symbol} ${a}`);stack.push(symbol)}
|
|
}
|
|
else throw `${symbol} is not a recognized symbol`
|
|
})
|
|
if(result.length === 1) return result.pop()
|
|
else throw `${RPN} is not a correct RPN`
|
|
}
|
|
```
|
|
```js
|
|
|
|
```
|