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>");
}