Splitwise settle debts
by kpulkit29
JavaScript
let trans = [[0,1,10], [1,0,1], [1,2,5], [2,0,5]]
let score = {}, negs = [], pos = [];
for(let item of trans) {
const [f,t,a] = item;
score[f] = (score[f] || 0) - a;
score[t] = (score[t] || 0) + a;
}
console.log(score);
Object.values(score).map(val => {
if(val<0) negs.push(val);
if(val>0) pos.push(val);
})
function rec(pos, negs) {
if(pos.length + negs.length == 0) return 0;
let count = Infinity;
let n = negs[0];
for(let i=0; i<pos.length; i++) {
let p = pos[i];
let newPos = [...pos];
let newNegs = [...negs];
newNegs.shift();
newPos.splice(i, 1);
if(p == -1*n) {
count = Math.min(count, rec(newPos, newNegs));
continue
}
else if(p > -1*n) {
newPos.push(p+n);
} else {
newNegs.push(p+n);
}
count = Math.min(count, rec(newPos, newNegs));
}
return count+1;
}
console.log(rec(pos, negs));