Tâche
Supposons que le p
pepole doive scinder un projet de loi; chacun d'eux est identifié par un triple (Name, n, k)
composé de:
Name
: le nom ;n
: le montant qu'elle doit payer ;k
: le montant effectivement payé .
Le défi ici est de savoir combien doit à qui.
Hypothèses
L'entrée et la sortie peuvent être dans n'importe quel format pratique.
p
n
k
p
Les noms sont des chaînes uniques de longueur arbitraire, composées de caractères alphabétiques en minuscules.
Solution
La solution est représentée par l'ensemble minimal de transactions entre les p
personnes; en particulier, ce sont des triplets(from, to, amount)
from
:name
de la personne qui donne de l'argent;to
:name
de la personne qui reçoit de l'argent;amount
: montant d'argent de la transaction.
REMARQUE : La somme de toutes les dettes ( n
) peut différer de la somme de tous les montants déjà payés ( k
). Dans ce cas, vous devez ajouter la sortie ('owner', Name, amount)
ou (Name, 'owner', amount)
le format que vous avez choisi. N'importe quel nom ne sera jamais owner
. La chaîne «propriétaire» est flexible.
S'il existe plusieurs ensembles minimaux, sélectionnez celui avec la somme minimale de tous les montants de transaction (valeurs absolues); en cas d'égalité, choisissez-en un.
Cas de test:
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)]
C'est le code-golf: le code le plus court gagne .
Réponses:
JavaScript (ES6),
252 227 223 222215 octetsPrend l'entrée comme
[[n0, k0, name0], [n1, k1, name1], ...]
.Les transactions dans la solution peuvent être positives ou négatives. Le propriétaire est appelé non défini .
Essayez-le en ligne!
Commenté
la source