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;