JavaScript от Radu TM • June 10, 2022
// Алгоритм Splitwise
// 1. Начинаем с создания объекта "платежа". Этот объект будет отслеживать, кому кому должно какое количество денег.
var payment = {};
// 2. Затем проходим по каждому человеку в группе.
for (var i = 0; i < group.length; i++) {
// 3. Для каждого человека проходим по каждому из его друзей.
for (var j = 0; j < group[i].friends.length; j++) {
// 4. Если друг не присутствует в объекте платежа, мы создаем его и устанавливаем его баланс равным 0.
if (!payment.hasOwnProperty(group[i].friends[j])) {
payment[group[i].friends[j]] = 0;
}
// 5. Затем рассчитываем, сколько должен человек своему другу. Мы делаем это, взяв общую сумму, потраченную им, деленную на количество друзей, а затем вычитаем сумму, которую его друг уже заплатил ему.
var amountOwed = (group[i].amount / group[i].friends.length) - payment[group[i].friends[j]];
// 6. Если сумма, которую нужно заплатить, меньше 0, это означает, что друг уже заплатил больше своей доли, поэтому нам ничего делать не нужно. В противном случае мы добавляем сумму, которую нужно заплатить, в объект платежа.
if (amountOwed > 0) {
payment[group[i].friends[j]] += amountOwed;
}
}
}
// 7. Наконец, проходим по объекту платежа и выводим на экран, кому кому нужно сколько денег.
for (var key in payment) {
console.log(key + ' owes ' + payment[key]);
}
0
22.477