function solve(arr) {
function take(set1sum, set2sum = 0, mapper = 0, s = 0) {
let result = { mapper, set1sum, set2sum };
for (let i = s; i < arr.length; i++) {
const bit = 1 << i;
if (!(mapper & bit)) {
const x = arr[i];
if (set1sum - x - (set2sum + x) < set1sum - set2sum) {
const r = take(set1sum - x, set2sum + x, mapper | bit, i);
const d = Math.abs(r.set1sum - r.set2sum);
if (d < Math.abs(result.set1sum - result.set2sum)) {
if (d === 0) return r;
result = r;
}
}
}
}
return result;
}
const sum = arr.reduce((acc, cur) => acc + cur, 0);
const { set1sum, set2sum, mapper } = take(sum);
const set1 = [];
const set2 = [];
for (let i = 0; i < arr.length; i++) {
if (mapper & (1 << i)) {
set2.push(arr[i]);
} else {
set1.push(arr[i]);
}
}
return { set1, set2, set1sum, set2sum };
}
Вы это говно разбейте хотяб на саб функции/модули нормально и будет ок.