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));