add RPN snippets
This commit is contained in:
24
snippets/infixToPostFix.md
Normal file
24
snippets/infixToPostFix.md
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
const infix = expr => {
|
||||||
|
let rpn = ''
|
||||||
|
let solve = expr.replace(/\^/g,'**').match(/([0-9]+|[\+\(\)\/\-]|\*+)/g).filter(el => !/\s+/.test(el) && el !== '')
|
||||||
|
let stack = []
|
||||||
|
let precedence = {'**':5,'/':4,'*':4,'+':3,'-':3}
|
||||||
|
solve.forEach(symbol => {
|
||||||
|
if(!isNaN(parseFloat(symbol)) && isFinite(symbol)){
|
||||||
|
rpn += symbol + ' '
|
||||||
|
}
|
||||||
|
else if (Object.keys(precedence).includes(symbol)) {
|
||||||
|
while(((precedence[symbol] < precedence[stack[stack.length-1]]) || ((precedence[symbol] == precedence[stack[stack.length-1]]) && symbol !== "**"))&&(stack[stack.length - 1] !== '(')) {
|
||||||
|
rpn += stack.pop() + ' '
|
||||||
|
}
|
||||||
|
stack.push(symbol)
|
||||||
|
}
|
||||||
|
else if(symbol === '('){stack.push(symbol)}
|
||||||
|
else if(symbol === ')'){while (stack[stack.length - 1] !== '('){rpn += stack.pop() + ' '; if (stack.length === 0){throw `Mismatched parantheses`}} stack.pop()}
|
||||||
|
else {throw `${symbol} is not a recognized symbol`}
|
||||||
|
})
|
||||||
|
while(stack.length !== 0){
|
||||||
|
rpn += stack.pop() + ' '
|
||||||
|
}
|
||||||
|
return rpn
|
||||||
|
}
|
||||||
29
snippets/postfixToInfix.md
Normal file
29
snippets/postfixToInfix.md
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
const postFix = 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`
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user