diff --git a/Matchsticks.htm b/Matchsticks.htm
index 1db422b..edf1ae4 100644
--- a/Matchsticks.htm
+++ b/Matchsticks.htm
@@ -2266,6 +2266,113 @@
Matchsticks Puzzle Solver
]
};
+ const calcConf = {
+ "+": [
+ {
+ stcksFlting: 0,
+ movesRemaining: 0,
+ cond: (numb1, numb2, numb3) => numb1 + numb2 === numb3,
+ fn: (numb1, numb2, numb3) => createResponse(numb1, numb2, numb3, PLUS)
+ },
+ {
+ stcksFlting: 0,
+ movesRemaining: 1,
+ cond: (numb1, numb2, numb3) => numb1 - numb2 === -numb3,
+ fn: (numb1, numb2, numb3) => createResponse(numb1, numb2, MINUS + numb3, MINUS)
+ },
+ {
+ stcksFlting: 1,
+ movesRemaining: 1,
+ cond: (numb1, numb2, numb3) => numb1 - numb2 === -numb3,
+ fn: (numb1, numb2, numb3) => [createResponse(numb1, numb2, PLUS + numb3, MINUS), createResponse(PLUS + numb1, numb2, numb3, MINUS)]
+ },
+ {
+ stcksFlting: 0,
+ movesRemaining: 1,
+ cond: (numb1, numb2, numb3) => numb1 - numb2 === numb3,
+ fn: (numb1, numb2, numb3) => createResponseWithSuperscript(numb1, numb2, numb3, MINUS)
+ },
+ {
+ stcksFlting: 0,
+ movesRemaining: 2,
+ cond: (numb1, numb2, numb3) => numb1 * numb2 === numb3,
+ fn: (numb1, numb2, numb3) => createResponse(numb1, numb2, numb3, MULTIPLICATION)
+ },
+ {
+ stcksFlting: -1,
+ movesRemaining: 2,
+ cond: (numb1, numb2, numb3) => numb1 / numb2 === numb3,
+ fn: (numb1, numb2, numb3) => createResponse(numb1, numb2, numb3, DIVISION)
+ },
+ {
+ stcksFlting: 1,
+ movesRemaining: 0,
+ cond: (numb1, numb2, numb3) => numb1 + numb2 === numb3,
+ fn: (numb1, numb2, numb3) => createResponseWithSuperscript(numb1, numb2, numb3, PLUS)
+ },
+ {
+ stcksFlting: 1,
+ movesRemaining: 0,
+ cond: (numb1, numb2, numb3) => -numb1 + numb2 === numb3,
+ fn: (numb1, numb2, numb3) => createResponse(MINUS + numb1, numb2, numb3, PLUS)
+ },
+ {
+ stcksFlting: 1,
+ movesRemaining: 0,
+ cond: (numb1, numb2, numb3) => numb1 + numb2 === -numb3,
+ fn: (numb1, numb2, numb3) => createResponse(numb1, numb2, MINUS + numb3, PLUS)
+ },
+ {
+ stcksFlting: 0,
+ movesRemaining: 1,
+ cond: (numb1, numb2, numb3) => numb1 - numb2 === -numb3,
+ fn: (numb1, numb2, numb3) => createResponse(numb1, numb2, MINUS + numb3, MINUS)
+ },
+ {
+ stcksFlting: 1,
+ movesRemaining: 1,
+ cond: (numb1, numb2, numb3) => -numb1 - numb2 === -numb3,
+ fn: (numb1, numb2, numb3) => createResponse(MINUS + numb1, numb2, MINUS + numb3, MINUS)
+ },
+ {
+ stcksFlting: 0,
+ movesRemaining: 1,
+ cond: (numb1, numb2, numb3) => numb3 === 0 && numb1 - numb2 === numb3,
+ fn: (numb1, numb2, numb3) => createResponseWithSuperscript(numb1, numb2, numb3, MINUS)
+ },
+ {
+ stcksFlting: -1,
+ movesRemaining: 1,
+ cond: (numb1, numb2, numb3) => numb1 - numb2 === numb3,
+ fn: (numb1, numb2, numb3) => createResponse(numb1, numb2, numb3, MINUS)
+ },
+ {
+ stcksFlting: -1,
+ movesRemaining: 2,
+ cond: (numb1, numb2, numb3) => numb1 === numb2 - numb3,
+ fn: (numb1, numb2, numb3) => createResponse1(numb1, numb2, numb3, MINUS)
+ },
+ {
+ stcksFlting: 0,
+ movesRemaining: 2,
+ cond: (numb1, numb2, numb3) => numb1 === numb2 + numb3,
+ fn: (numb1, numb2, numb3) => createResponse1(numb1, numb2, numb3, PLUS)
+ },
+ {
+ stcksFlting: 2,
+ movesRemaining: 0,
+ cond: (numb1, numb2, numb3) => numb1 + numb2 === numb3,
+ fn: (numb1, numb2, numb3) => createResponse(numb1, numb2, PLUS + numb3, PLUS)
+ },
+ {
+ stcksFlting: 2,
+ movesRemaining: 0,
+ cond: (numb1, numb2, numb3) => -numb1 + numb2 === -numb3,
+ fn: (numb1, numb2, numb3) => createResponse(MINUS + numb1, numb2, MINUS + numb3, PLUS)
+ }
+ ],
+ };
+
window.onload = function () {
addIdentityAll(conf);
conf = addToConfiguration(conf, 10);
@@ -2282,6 +2389,7 @@ Matchsticks Puzzle Solver
addToConfigurationOne(conf);
addToConfigurationSeven(conf);
addCompositMapping(conf);
+ //console.log(JSON.stringify(conf["76"]));
};
function solve() {
@@ -2290,7 +2398,7 @@ Matchsticks Puzzle Solver
const dropdown = document.getElementById('dropdown').value;
// document.getElementById('output').textContent = "";
document.getElementById('output').innerHTML = "";
- console.log(JSON.stringify(conf["6"]));
+ //console.log(JSON.stringify(conf["6"]));
const arr = parseInput(text, "=");
const operation = arr[0];
result = arr[3];
@@ -2300,7 +2408,7 @@ Matchsticks Puzzle Solver
matchMoves(-1, 1);
const sticksToMove = parseInt(dropdown);
var sticksMoved = 0, sticksFloating = 0;
- // console.log(JSON.stringify(conf["32"]));
+ //console.log(JSON.stringify(conf["76"]));
// let conf1 = addIdentity(conf[Math.abs(num1)], Math.abs(num1));
// let conf2 = addIdentity(conf[Math.abs(num2)], Math.abs(num2));
// let conf3 = addIdentity(conf[Math.abs(arr[3])], Math.abs(arr[3]));
@@ -2423,7 +2531,8 @@ Matchsticks Puzzle Solver
let results = [];
switch (op) {
case PLUS:
- results = verifyAndCreateResponsePlus(numb1, numb2, numb3, stcksFlting, movesRemaining);
+ // results = verifyAndCreateResponsePlus(numb1, numb2, numb3, stcksFlting, movesRemaining);
+ results = performOperation(PLUS, numb1, numb2, numb3, stcksFlting, movesRemaining);
break;
case MINUS:
results = verifyAndCreateResponseMinus(numb1, numb2, numb3, stcksFlting, movesRemaining);
@@ -2730,10 +2839,10 @@ Matchsticks Puzzle Solver
const k0 = parseInt(key[0]);
const k1 = parseInt(key[1]);
const obj = JSON.parse(JSON.stringify(ob));
- obj.destination = key.startsWith("1") ? 10 + k1 : k0*10 + 1;
+ obj.destination = key.startsWith("7") ? 10 + parseInt(k1) : parseInt(k0)*10 + 1;
addItemToConf(conf[key], obj);
const obj2 = JSON.parse(JSON.stringify(ob2));
- obj2.destination = key.startsWith("1") ? 40 + k1 : k0*10 + 4;
+ obj2.destination = key.startsWith("7") ? 40 + parseInt(k1) : parseInt(k0)*10 + 4;
addItemToConf(conf[key], obj2);
}
});
@@ -2880,6 +2989,24 @@ Matchsticks Puzzle Solver
addToConfItems(conf[key], 10 + parseInt(key), {move: 0, add: 2});
}
+ function performOperation(oper, numb1, numb2, numb3, stcksFlting, movesRemaining) {
+ let results = [];
+ calcConf[oper].forEach(item => {
+ if (item.stcksFlting === stcksFlting && item.movesRemaining === movesRemaining
+ && item.cond.apply(null, [numb1, numb2, numb3])) {
+ const result = item.fn.apply(null, [numb1, numb2, numb3]);
+ // console.log(item.cond.apply(null, [numb1, numb2, numb3]));
+ // console.log(result);
+ if (Array.isArray(result)) {
+ results = results.concat(result);
+ } else {
+ results.push(result);
+ }
+ }
+ });
+ return results;
+ }
+
function addToConfItems(confItems, destination, obj) {
const confItem = confItems.find(it => it.destination === destination);
obj.destination = destination;