JSFiddle - React, Tailwind, and code Playground
by tsdexter
JavaScript
var package1 = { 'item1': 20, 'item2': 45, 'item3': 45 },
package2 = { 'item1': 13, 'item2': 5, 'item3': 15 },
package3 = { 'item1': 25, 'item2': 10, 'item3': 0 },
items = [package1, package2, package3],
requirements = {'item1': 100, 'item2': 45, 'item3': 45 },
max_val = 0,
solutions = [],
g, p, i, item, val;
for (i = 0; i < items.length; i += 1) {
item = items[i];
item.max = Math.min(
Math.floor(requirements.item1 / item.item1),
Math.floor(requirements.item2 / item.item2),
Math.floor(requirements.item3 / item.item3)
);
}
for (g = 0; g <= package1.max; g += 1) {
for (p = 0; p <= package2.max; p += 1) {
for (i = 0; i <= package3.max; i += 1) {
if (i * package3.item1 + g * package1.item1 + p * package2.item1 > requirements.item1) {
continue;
}
if (i * package3.item2 + g * package1.item2 + p * package2.item2 > requirements.item2) {
continue;
}
if (i * package3.item3 + g * package1.item3 + p * package2.item3 > requirements.item3) {
continue;
}
val = i * package3.item1 + g * package1.item1 + p * package2.item1;
if (val > max_val) {
solutions = [];
max_val = val;
}
if (val === max_val) {
solutions.push([g, p, i]);
}
}
}
}
document.write("maximum item1: " + max_val + '<br>');
for (i = 0; i < solutions.length; i += 1) {
item = solutions[i];
document.write("(package1: " + item[0] + ", package2: " + item[1] + ", package3: " + item[2] + ")<br>");
}