задача
Предположим, что p
люди должны разделить счет; каждый из них идентифицирован тройкой, (Name, n, k)
состоящей из:
Name
: имя ;n
: сумму, которую она / он должен заплатить ;k
: сумма, которую он / она фактически заплатил .
Задача здесь состоит в том, чтобы выяснить, сколько кому кто должен.
Предположения
Ввод и вывод могут быть в любом удобном формате.
p
n
k
p
Имена - это уникальные строки произвольной длины, состоящие из строчных букв алфавита.
Решение
Решение представлено минимальным набором транзакций среди p
людей; в частности они тройки(from, to, amount)
from
:name
Человек , который дает деньги;to
:name
Человек , который получает деньги;amount
: сумма денег по сделке.
ПРИМЕЧАНИЕ . Сумма всех долгов ( n
) может отличаться от суммы всех уже оплаченных сумм ( k
). В этом случае вы должны добавить в вывод ('owner', Name, amount)
или (Name, 'owner', amount)
в формате, который вы выбрали. Любое имя никогда не будет owner
. Строка 'owner' является гибкой.
Если существует несколько наборов минимальных значений, выберите набор с минимальной суммой всех сумм транзакций (абсолютные значения); в случае галстука, выберите один из них.
Тестовые случаи:
inputs(Name,n,k):
[('a',30,40),('b',40,50),('c',30,15)]
[('a',30,30),('b',20,20)]
[('a',30,100),('b',30,2),('c',40,0)]
[('a',344,333),('b',344,200),('c',2,2)]
[('a',450,400),('b',300,300),('c',35,55)]
outputs(from, to, amount):
[('c','a',10),('c','b',5),('owner','b',5)] or [('c','b',10),('c','a',5),('owner','a',5)]
[]
[('owner','a',2),('b','a',28),('c','a',40)] PS: [('owner','a',2),('b','a',68),('c','b',40)] has the same number of transactions, but it is not a valid answer, because the total amount of its transaction is greater than that of the proposed solution.
[('a','owner',11),('b','owner',144)]
[('a','owner',30),('a','c',20)]
Это код-гольф: самый короткий код выигрывает .
Ответы:
JavaScript (ES6),
252 227 223 222215 байтПринимает вход как
[[n0, k0, name0], [n1, k1, name1], ...]
.Транзакции в решении могут быть как положительными, так и отрицательными. Владелец называется неопределенным .
Попробуйте онлайн!
комментарии
источник