UNPKG

apigee-jsc-debug

Version:

Node module to facilitate local execution and debugging of Apigee JSC callouts.

123 lines (105 loc) 3.82 kB
var inputs = context.getVariable("numArray"); var nums = permutator(inputs); var ops = combinator(3, ['+', '-', '*', '/']); var candidates = []; var answers = []; fixme++; //ops need to be expanded out to the permutations var permutatedOps = []; ops.forEach(function(op) { var addOps = []; var candOps = permutator(op); candOps.forEach(function(candOp) { var add = true; if (addOps.length > 0) { addOps.some(function(addOp) { if (addOp.join('') === candOp.join('')) { add = false; return; } }); if (add) addOps.push(candOp); } else addOps.push(candOp); }); permutatedOps.push(addOps); }); //for each set of nums //apply each of the ops sequences //until we get a 24 nums.forEach(function(numArray) { permutatedOps.forEach(function(oopsArray) { oopsArray.forEach(function(opsArray) { //case 1: (a+b)*c/d //case 2: (a+b)*(c/d) //case 3: (a+b*c)/d //case 4: a+b*(c/d) //case 5: a+(b*c/d) //case 6: a+(b*c)/d //case 7: a+b*c/d candidates.push("(" + numArray[0] + opsArray[0] + numArray[1] + ")" + opsArray[1] + numArray[2] + opsArray[2] + numArray[3]); candidates.push("(" + numArray[0] + opsArray[0] + numArray[1] + ")" + opsArray[1] + "(" + numArray[2] + opsArray[2] + numArray[3] + ")"); candidates.push("(" + numArray[0] + opsArray[0] + numArray[1] + opsArray[1] + numArray[2] + ")" + opsArray[2] + numArray[3]); candidates.push(numArray[0] + opsArray[0] + numArray[1] + opsArray[1] + "(" + numArray[2] + opsArray[2] + numArray[3] + ")"); candidates.push(numArray[0] + opsArray[0] + "(" + numArray[1] + opsArray[1] + numArray[2] + opsArray[2] + numArray[3] + ")"); candidates.push(numArray[0] + opsArray[0] + "(" + numArray[1] + opsArray[1] + numArray[2] + ")" + opsArray[2] + numArray[3]); candidates.push(numArray[0] + opsArray[0] + numArray[1] + opsArray[1] + numArray[2] + opsArray[2] + numArray[3]); }); }); }); candidates.forEach(function(candidate) { var result = eval(candidate); if (result == 24) answers.push(candidate); }); var result = { numbers: inputs, count: answers.length, answers: answers }; context.setVariable("response.content", JSON.stringify(result)); function permutator(input) { var set = []; return permute(input); function permute(arr, data) { var cur, memo = data || []; if (!arr.splice) arr = arr.split(","); for (var i = 0; i < arr.length; i++) { cur = arr.splice(i, 1)[0]; if (arr.length === 0) set.push(memo.concat([cur])); permute(arr.slice(), memo.concat([cur])); arr.splice(i, 0, cur); } return set; } } function uniquePermutator(input) { var set = []; return permute(input); function permute(arr, data) { var cur, memo = data || []; for (var i = 0; i < arr.length; i++) { cur = arr.splice(i, 1)[0]; if (arr.length === 0) set.push(memo.concat([cur])); permute(arr.slice(), memo.concat([cur])); arr.splice(i, 0, cur); } return set; } } function combinator(n, from) { var set = []; pick(n, [], 0, from, set); return set; function pick(n, got, pos, from, result) { var cnt = 0; if (got.length == n) { result.push(got.join('').split('')); return 1; } for (var i = pos; i < from.length; i++) { got.push(from[i]); cnt += pick(n, got, i, from, result); got.pop(); } return cnt; } }