Показать сообщение отдельно
  #1 (permalink)  
Старый 11.06.2018, 23:27
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

массив, распределение суммы как можно более равномерно
Вариант решения ниже, не очень оптимальный, подскажите любое другое решение.

var input = [5,10,0,12], //массив лимита каждой ячейки
    total = 7, // сумма которую надо распределить равномерно
    output = [];// результат распределения
//total = 7 => output = [2,2,0,3]
//total = 20 => output = [5,7,0,8]
//total = 40 => output = [5,10,0,12]
function fn(input, total, output) {
    for (var i = 0; total; i = ++i % input.length) {
        output[i] = output[i] || 0;
        if (output[i] + 1 > input[i]) continue;
        output[i]++;
        total--
    }
    return output
};

console.log(fn(input, total, output))//[3, 2, 0, 2]
Ответить с цитированием