вариант на котором остановился, если есть замечания напишите, всем откликнушимся большое спасибо!!!
<script>
function allocate(input, total) {
const output = [];
const length = input.length;
const order = input.map((value, index) => ({value,index}));
const sortedOrder = order.sort((a, b) => a.value - b.value);
for (let i = 0; i < length; i++) {
let {value,index} = sortedOrder[i];
let num = Math.floor(total/(length - i))
if(num > value) num = value;
total -= num;
output[index] = num
}
return output
};
let input = [5,10,0,12];
for (let total = 0; total < 41; total++) {
let output = allocate(input, total)
document.write(`${total}=>${output}<br>`)
}
</script>