надо разбить массив на подмассивы

есть массив, например [51, 56, 58, 59, 61], надо разбить его на подмассивы из N чисел

Например из 3(может быть любое количество): [51,56,58], [51,56,59], [51,56,61], [51,58,59], [51, 58,61], [51,59,61], [56,58,59], [56,58,61], [56,59,61], [58,59,61]

После посчитать суммы всех получившихся подмассивов и вывести сумму наибольшую возможную к заданному пределу 't', например 173

в данном случае у меня выдает масимальное число 805, а должно быть 876, не понимаю почему

function comb(arr, depth) {
const res = new Set();
if (depth === 0) res.add([]);
else {
  for (const pc of comb(arr, depth - 1)) {
    for (const e of arr) {
      if (pc.indexOf(e) !== -1) break;
      res.add([e, ...pc].sort((a, b) => a - b));
    }
  }
}
return res;

}

let sum = []

console.log([...comb([100, 76, 56, 44, 89, 73, 68, 56, 64, 123, 2333, 144, 50, 132, 123, 34, 89], 8)].map(e => [e, sum.push(e.reduce((a, b) => a + b, 0))]));

  console.log(sum.sort())

Ответы (1 шт):

Автор решения: Проста Miha

Прошу, и максимальная сумма из данного массива [51, 56, 58, 59, 61] это 178, потому-что [58 + 59 + 61] = 178)

P.S: способ не самый лучший

let array = [51, 56, 58, 59, 61];
let comb = 3;
let sum = 0;
var combinations = (function() {
  let res = [];

  function combinations(arr, k, start, idx, current) {
    if (idx === k) {
      res.push(current.slice());
      return;
    }
    for (let i = start; i < arr.length; i++) {
      current[idx] = arr[i];
      combinations(arr, k, i + 1, idx + 1, current);
    }
  }

  return function(arr, k) {
    res = [];
    combinations(arr, k, 0, 0, []);
    let temp = res;
    res = null;
    return temp;
  };
}());

var result = combinations(array, comb);

for (let i = 0; i < result.length; i++) {
  let temp = result[i].reduce((a, b) => a + b, 0);
  sum = temp > sum ? temp : sum;
}

console.log(result);
console.log(sum);

→ Ссылка