Bài tập
Giả sử rằng ppepole phải chia một hóa đơn; mỗi người trong số họ được xác định bởi một bộ ba (Name, n, k)gồm:
Name: tên ;n: số tiền cô ấy / anh ấy phải trả ;k: số tiền cô ấy / anh ấy thực sự đã trả .
Thách thức ở đây là tìm ra ai nợ ai.
Giả định
Đầu vào và đầu ra có thể ở bất kỳ định dạng thuận tiện.
pnkpTên là các chuỗi duy nhất có độ dài tùy ý, bao gồm các ký tự chữ cái viết thường.
Giải pháp
Giải pháp được thể hiện bằng tập hợp giao dịch tối thiểu trong pnhân dân; đặc biệt họ là ba(from, to, amount)
from:namecủa người đưa tiền;to:namecủa người nhận tiền;amount: số tiền của giao dịch.
LƯU Ý : Tổng của tất cả các khoản nợ ( n) có thể khác với tổng của tất cả các khoản đã trả ( k). Trong trường hợp này, bạn phải thêm vào đầu ra ('owner', Name, amount)hoặc (Name, 'owner', amount)ở định dạng bạn đã chọn. Bất kỳ tên nào cũng sẽ không bao giờ owner. Chuỗi 'chủ sở hữu' là linh hoạt.
Nếu tồn tại một số bộ tối thiểu, hãy chọn bộ có tổng tối thiểu của tất cả số tiền giao dịch (giá trị tuyệt đối); trong trường hợp cà vạt, chọn một trong số họ.
Các trường hợp thử nghiệm:
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)]
Đây là code-golf: chiến thắng mã ngắn nhất .