Zadanie
Załóżmy, że p
pepole musi podzielić rachunek; każdy z nich jest identyfikowany przez potrójny (Name, n, k)
składający się z:
Name
: nazwa ;n
: kwota, którą on / on musi zapłacić ;k
: kwota, którą faktycznie zapłacił .
Wyzwanie polega na tym, aby dowiedzieć się, kto jest komu winien.
Założenia
Dane wejściowe i wyjściowe mogą być w dowolnym dogodnym formacie.
p
n
k
p
Nazwy są unikatowymi ciągami o dowolnej długości, złożonymi z małych liter alfabetu.
Rozwiązanie
Rozwiązanie reprezentuje minimalny zestaw transakcji między p
ludźmi; w szczególności są trzykrotnie(from, to, amount)
from
:name
osoby, która daje pieniądze;to
:name
osoby, która otrzymuje pieniądze;amount
: kwota pieniędzy z transakcji.
UWAGA : Suma wszystkich długów ( n
) może różnić się od sumy wszystkich już spłaconych kwot ( k
). W takim przypadku musisz dodać wynik ('owner', Name, amount)
lub (Name, 'owner', amount)
format, który wybrałeś. Żadna nazwa nigdy nie będzie owner
. Ciąg „właściciel” jest elastyczny.
Jeśli istnieje kilka zestawów minimalnych, wybierz ten z minimalną sumą wszystkich kwot transakcji (wartości bezwzględne); w przypadku remisu wybierz jeden z nich.
Przypadki testowe:
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)]
To jest golf-golf: wygrywa najkrótszy kod .
Odpowiedzi:
JavaScript (ES6),
252 227 223 222215 bajtówPobiera dane wejściowe jako
[[n0, k0, name0], [n1, k1, name1], ...]
.Transakcje w roztworze mogą być dodatnie lub ujemne. Właściciel nazywa się niezdefiniowany .
Wypróbuj online!
Skomentował
źródło