Tugas
Misalkan ppepole harus membagi tagihan; masing-masing diidentifikasi oleh tiga yang (Name, n, k)terdiri dari:
Name: nama ;n: jumlah yang harus dia bayar ;k: jumlah yang sebenarnya dia bayar .
Tantangannya di sini adalah untuk mengetahui berapa banyak yang berutang siapa.
Asumsi
Input dan output dapat dalam format apa pun yang nyaman.
pnkpNama adalah string unik dengan panjang arbitrer, terdiri dari karakter alfabet huruf kecil.
Larutan
Solusinya diwakili oleh set transaksi minimum di antara porang - orang; khususnya mereka tiga kali lipat(from, to, amount)
from:namedari orang yang memberi uang;to:namedari orang yang menerima uang;amount: jumlah uang transaksi.
CATATAN : Jumlah semua hutang ( n) dapat berbeda dari jumlah semua jumlah yang sudah dibayarkan ( k). Dalam hal ini, Anda harus menambahkan dalam output ('owner', Name, amount)atau (Name, 'owner', amount)dalam format yang Anda pilih. Nama apa pun tidak akan pernah owner. String 'pemilik' fleksibel.
Jika ada beberapa set mimimum, pilih satu dengan jumlah minimum semua jumlah transaksi (nilai absolut); dalam kasus dasi, pilih salah satunya.
Kasus uji:
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)]
Ini adalah kode-golf: kode terpendek menang .