Created
May 7, 2019 17:45
-
-
Save fredrikdev/8e717c32e335afb96c06ab33334aebc8 to your computer and use it in GitHub Desktop.
SEND+MORE=MONEY Solver
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SEND+MORE=MONEY Solver. By Fredrik Johansson 2019. | |
// Every distinct letter needs to be a number and the equation need to solve. | |
const o = document.getElementById('app'); | |
o.innerHTML = `<h1>SEND+MORE=MONEY Solver</h1>`; | |
// input | |
let formula1 = "SEND"; | |
// + | |
let formula2 = "MORE"; | |
// = | |
let formula3 = "MONEY"; //"SEND+MORE=MONEY"; | |
// initialize | |
let rotateUnique = ""; //"SENDMORY"; | |
for (let x = 0; x < formula1.length; x++) | |
if (rotateUnique.indexOf(formula1[x]) < 0) rotateUnique += formula1[x]; | |
for (let x = 0; x < formula2.length; x++) | |
if (rotateUnique.indexOf(formula2[x]) < 0) rotateUnique += formula2[x]; | |
for (let x = 0; x < formula3.length; x++) | |
if (rotateUnique.indexOf(formula3[x]) < 0) rotateUnique += formula3[x]; | |
let rotateUniqueRE = new Array(); | |
for (let x = 0; x < rotateUnique.length; x++) | |
rotateUniqueRE.push(new RegExp(rotateUnique[x],"g")); | |
let rotateMin = "0".repeat(rotateUnique.length); | |
let rotateMax = "9".repeat(rotateUnique.length)*1; | |
// run | |
let tickStart = new Date(); | |
for (let x = 0; x <= rotateMax; x++) { | |
let rotateData = (rotateMin + x).slice(-rotateMin.length); | |
// prepare | |
let f1 = formula1; | |
let f2 = formula2; | |
let f3 = formula3; | |
let h = new Array(); | |
for (let y = 0; y < rotateUnique.length; y++) { | |
if (h.indexOf(rotateData[y]) > -1) | |
break; | |
h.push(rotateData[y]); | |
f1 = f1.replace(rotateUniqueRE[y], rotateData[y]); | |
f2 = f2.replace(rotateUniqueRE[y], rotateData[y]); | |
f3 = f3.replace(rotateUniqueRE[y], rotateData[y]); | |
if (y != rotateUnique.length - 1) | |
continue; | |
// eval | |
if (!f1.startsWith("0") && !f2.startsWith("0") && !f3.startsWith("0") && (f1*1 + f2*1 == f3*1)) { | |
o.innerHTML += "Answer is: " + f1 + "+" + f2 + "=" + f3 + "<br>"; | |
o.innerHTML += "Ended after " + Math.round((new Date()-tickStart)/1000) + " sec!<br>"; | |
return; | |
} | |
} | |
} | |
o.innerHTML += "No answer found!<br>"; | |
o.innerHTML += "Ended after " + Math.round((new Date()-tickStart)/1000) + " sec!<br>"; | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment