JSFiddle - React, Tailwind, and code Playground
by Pavel Kityan
JavaScript
var nominals = [],
sum;
if (typeof window !== 'undefined') {
var res = window.prompt('Give me 3 nominals and the sum. Separate with [SPACE]');
if (res) {
res = res.split(' ');
nominals = [res[0] * 1, res[1] * 1, res[2] * 1].sort(function(a, b) {
return a < b;
});
sum = res[3] * 1;
}
start();
} else {
nominals = [process.argv[2] * 1, process.argv[3] * 1, process.argv[4] * 1].sort(function(a, b) {
return a < b;
});
sum = process.argv[5] * 1;
start();
}
function start() {
for (var i = 0; i < 3; i++) {
if (checkVal(nominals[i])) {
output('Input error');
return;
}
}
if (checkVal(sum)) {
output('Input error');
return;
}
var inHand = calc(nominals, sum);
output(`
We need ${sum}.
We give: ${showInHand(inHand, nominals).join(' + ')} = ${getSumInHand(inHand, nominals)}.
` +
((getSumInHand(inHand, nominals) == sum) ? 'Yes, we can!' : 'No, we cannot.')
);
}
function calc(nominals, sum) {
var inHand = [0, 0, 0];
for (var i = 0; i < 3; i++) {
while (getSumInHand(inHand, nominals) < sum) {
inHand[i]++;
}
if (getSumInHand(inHand, nominals) == sum) {
return inHand;
} else {
inHand[i]--;
}
}
// correcting #1 if still here
if (inHand[0] > 0) {
inHand[0]--;
for (var i = 1; i < 3; i++) {
while (getSumInHand(inHand, nominals) < sum) {
inHand[i]++;
}
if (getSumInHand(inHand, nominals) == sum) {
return inHand;
} else {
inHand[i]--;
}
}
}
// correcting #2 if still here
if (inHand[1] > 0) {
inHand[1]--;
while (getSumInHand(inHand, nominals) < sum) {
inHand[2]++;
}
if (getSumInHand(inHand, nominals) == sum) {
return inHand;
} else {
inHand[i]--;
}
}
return inHand;
}
function getSumInHand(inHand, nominals) {
return [0, 1, 2].reduce(function(total, i) {
return total + inHand[i] * nominals[i];
}, 0);
}
function...