कार्य
मान लीजिए कि pपेपोल को एक बिल को विभाजित करना है; उनमें से प्रत्येक एक ट्रिपल से (Name, n, k)बना है:
Name: नाम ;n: वह राशि जिसे उसे भुगतान करना है ;k: वह राशि / जो उसने वास्तव में चुकाई थी ।
यहां चुनौती यह पता लगाने की है कि किसका कितना बकाया है।
मान्यताओं
इनपुट और आउटपुट किसी भी सुविधाजनक प्रारूप में हो सकते हैं।
pnkpनाम मनमाने ढंग से लंबाई के अनूठे तार होते हैं, जो निचली स्थिति के वर्णों से बने होते हैं।
उपाय
समाधान pलोगों के बीच लेनदेन के न्यूनतम सेट द्वारा दर्शाया गया है ; विशेष रूप से वे त्रिक हैं(from, to, amount)
from:nameपैसा देने वाले व्यक्ति का;to:nameधन प्राप्त करने वाले व्यक्ति का;amount: लेन-देन का धन।
नोट : सभी ऋणों nका योग ( k) पहले से भुगतान की गई सभी राशियों के योग से अलग हो सकता है ( )। इस मामले में, आपको आउटपुट ('owner', Name, amount)या (Name, 'owner', amount)आपके द्वारा चुने गए प्रारूप में जोड़ना होगा । कोई भी नाम कभी नहीं होगा 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)]
यह कोड-गोल्फ है: सबसे छोटा कोड जीतता है ।