Tarea
Supongamos que p
pepole tiene que dividir un billete; cada uno de ellos está identificado por un triple (Name, n, k)
compuesto por:
Name
: el nombre ;n
: la cantidad que tiene que pagar ;k
: la cantidad que realmente pagó .
El desafío aquí es descubrir cuánto le debe a quién.
Supuestos
La entrada y salida pueden estar en cualquier formato conveniente.
p
n
k
p
Los nombres son cadenas únicas de longitud arbitraria, compuestas de letras minúsculas del alfabeto.
Solución
La solución está representada por el conjunto mínimo de transacciones entre las p
personas; en particular son triples(from, to, amount)
from
:name
de la persona que da dinero;to
:name
de la persona que recibe dinero;amount
: cantidad de dinero de la transacción.
NOTA : La suma de todas las deudas ( n
) puede diferir de la suma de todas las cantidades ya pagadas ( k
). En este caso, debe agregar la salida ('owner', Name, amount)
o (Name, 'owner', amount)
el formato que haya elegido. Cualquier nombre nunca será owner
. La cadena 'propietario' es flexible.
Si existen varios conjuntos mínimos, seleccione el que tenga la suma mínima de todos los importes de las transacciones (valores absolutos); En caso de empate, elija uno de ellos.
Casos de prueba:
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)]
Este es el código de golf: el código más corto gana .
Respuestas:
JavaScript (ES6),
252 227 223 222215 bytesToma entrada como
[[n0, k0, name0], [n1, k1, name1], ...]
.Las transacciones en la solución pueden ser positivas o negativas. El propietario se llama indefinido .
Pruébalo en línea!
Comentado
fuente