JSFiddle - React, Tailwind, and code Playground
JavaScript
function evalRPN(expr) {
var m = expr.match(/\d+|[*\/+-]/g), st = [], a;
for(var i = 0; i < m.length; i++) {
switch(m[i]) {
case "+": if(st.length < 2) return NaN; a = st.pop(); st.push(st.pop() + a); break;
case "-": if(st.length < 2) return NaN; a = st.pop(); st.push(st.pop() - a); break;
case "*": if(st.length < 2) return NaN; a = st.pop(); st.push(st.pop() * a); break;
case "/": if(st.length < 2) return NaN; a = st.pop(); st.push(st.pop() / a); break;
default: if(st.length > 1) return NaN; st.push(parseInt(m[i]));
}
}
return st.pop();
}
function printRPN(expr) {
var m = expr.match(/\d+|[*\/+-]/g), st = [], a;
for(var i = 0; i < m.length; i++) {
switch(m[i]) {
case "+": a = st.pop(); st.push("(" + st.pop() + "+" + a + ")"); break;
case "-": a = st.pop(); st.push("(" + st.pop() + "-" + a + ")"); break;
case "*": a = st.pop(); st.push("(" + st.pop() + "*" + a + ")"); break;
case "/": a = st.pop(); st.push("(" + st.pop() + "/" + a + ")"); break;
default: st.push(parseInt(m[i]));
}
}
return st.pop();
}
function solve(input, target) {
var
len = input.length,
str = input.replace(/./g, "$& ").split(""),
ops = { "0": "", "1": " ", "2": "+", "3": "-", "4": "*", "5": "/" },
res = [];
for(i = 0; i < Math.pow(6, len); i++) {
var s = ("00000000000" + i.toString(6)).substr(-len);
for(var k = 0; k < len; k++)
str[k * 2 + 1] = ops[s.charAt(k)]
var expr = str.join("");
if(evalRPN(expr) == target)
res.push(expr);
}
return res;
}
var res = solve("129374", 22);
for(var i = 0; i < res.length; i++)
document.write(printRPN(res[i]) + "<br>");