JSFiddle - React, Tailwind, and code Playground
by Harm Zeinstra
JavaScript
var symbols = {
cog: 1,
house: 2,
bug: 3,
cat: 4,
box: 5,
leaf: 6,
key: 7,
dove: 8,
paw: 9
}
function shuffle(array) {
var currentIndex = array.length, temporaryValue, randomIndex;
// While there remain elements to shuffle...
while (0 !== currentIndex) {
// Pick a remaining element...
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
// And swap it with the current element.
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return array;
}
var rows = [
['cog', 'box', 'house', 'cog', 'paw', 20],
['dove', 'box', 'cog', 'cog', 'bug', 20],
['leaf', 'cat', 'leaf', 'key', 'leaf', 38],
['box', 'dove', 'bug', 'box', 'dove', 12],
['cog', 'box', 'dove', 'bug', 'bug', 18],
[23, 14, 22, 26, 23],
];
var checking = true;
var rowLength = 5;
while(checking) {
checking = false;
var columnSum = [0, 0, 0, 0, 0];
for (var i = 0; i < rows.length - 1; i++) {
var rowSum = 0;
for (var j = 0; j < rowLength; j++) {
columnSum[j] += symbols[rows[i][j]];
rowSum += symbols[rows[i][j]];
}
if (rowSum != rows[i][rowLength]) {
var randomValues = shuffle(Object.values(symbols));
var keys = Object.keys(symbols)
for (var k = 0; k < keys.length; k++) {
symbols[keys[k]] = randomValues[k];
}
checking = true;
break;
}
}
for (var i = 0; i < columnSum.length; i++) {
if (columnSum[i] != rows[rows.length-1][i]) {
var randomValues = shuffle(Object.values(symbols));
var keys = Object.keys(symbols)
for (var k = 0; k < keys.length; k++) {
symbols[keys[k]] = randomValues[k];
}
checking = true;
break;
}
}
}
Object.keys(symbols).forEach(function(key) {
document.writeln(key + " = " + symbols[key] + "<br>")
});
console.log(symbols);