JSFiddle - React, Tailwind, and code Playground
by jrab227
JavaScript
var store = {}
function generateGadgets(gadget){
if (gadget.length == 0){
return []
}
if (store[gadget.toString()]){
return store[gadget.toString()]
}
var result = gadget.map(function(num, index){
return {
'prefix': [combine(gadget.slice(0, index+1))],
'rest': generateGadgets(gadget.slice(index+1))
}
})
.reduce(function(agg, next){
if (next.rest.length == 0){ return agg.concat([next.prefix]) }
return agg.concat(
next.rest.map(function(tail){
return next.prefix.concat(tail)
})
)
}, [])
store[gadget.toString()] = result
return result
}
function combine(gadget){
return parseFloat(gadget.reduce(function(agg, next){
return agg.concat(next.toString())
}, ''))
}
function generateArithmetic(gadget){
if (gadget.length == 0){ return []}
if (gadget.length == 1){ return [gadget[0].toString()] }
var tails = generateArithmetic(gadget.slice(1))
return tails.map(function(tail){
return [gadget[0] + '+' + tail , gadget[0] + '-' + tail]
}).reduce(function(agg, next){ return agg.concat(next) }, [])
}
var solutions = generateGadgets([1, 2, 3, 4, 5, 6, 7, 8, 9])
.map(generateArithmetic)
.reduce(function(agg, expressions){ return agg.concat(expressions) }, [])
.filter(function(expression){ return eval(expression) == 100 })
console.log(solutions.map(function(exp){ return {'exp': exp, 'soln': eval(exp)}}))