JSFiddle - React, Tailwind, and code Playground
by mayorovp
JavaScript
find(...parse("VOLVO + FIAT == MOTOR"));
function parse(expr) {
var letters = [...new Set(expr.match(/\w/g))];
var words = [...new Set(expr.match(/\w+/g))];
var defs = words.map(w => `\tconst ${w} = ` +
[...w].map((l, i) => `${l} * ${Math.pow(10, w.length - i - 1)}`).join(" + ")
).join("\n");
var q1 = `function ([${letters.join(", ")}]) {
${defs}
return ${expr};
}`;
var quotedExpr = "`" + expr.replace(/\w+/g, w => "${" + w + "}") + "`";
var q2 = `function ([${letters.join(", ")}]) {
${defs}
return ${quotedExpr};
}`;
return new Function (`return [${q1}, ${q2}]`)();
}
function find(pred, fn) {
const digits = [0,1,2,3,4,5,6,7,8,9];
do {
if (pred(digits))
console.log(fn(digits));
let i;
for (i = 1; i < digits.length; i++)
if (digits[i-1] < digits[i])
break;
if (i == digits.length) break;
let j;
for (let k = 0; k<i; k++)
if (digits[k] < digits[i]) {
j = k;
break;
}
[digits[j], digits[i]] = [digits[i], digits[j]];
i--;
for (j = 0; j<i; j++, i--) {
[digits[i], digits[j]] = [digits[j], digits[i]];
}
} while (true);
}