Introducción
Has conseguido un trabajo como ministro de finanzas en tu país inventado en tu patio trasero. Ha decidido crear su propio banco en su país para usted y sus amigos menos confiables. Como no confía en sus amigos, ha decidido escribir un programa para validar todas las transacciones para evitar que sus amigos gasten en exceso su moneda inventada y arruinen su economía.
Tarea
Dado el saldo inicial y todas las transacciones, filtre todas las transacciones en las que alguien intente gastar de más y bloquee a cualquiera que intente gastar de más (esto incluye tratar de gastar de más en una cuenta cerrada) para que nunca vuelva a usar su banco filtrando las transacciones futuras hacia o desde su / su cuenta bancaria.
De entrada y salida
Dos listas A
y B
como entrada y una lista C
como salida. A
es el saldo inicial de cada cuenta con el formato [["Alice", 5], ["Bob", 8], ["Charlie", 2], ...]
. B
es una lista de transacciones con el formato [["Bob", "Alice", 3], ["Charlie", "Bob", 5], ...]
donde ["Bob", "Alice", 3]
significa que Bob quiere pagar a Alice 3 unidades monetarias. C
debe tener el mismo formato que B
. A
, B
y C
puede estar en cualquier formato razonable.
Casos de prueba
A: [["Alice", 5], ["Bob", 2]]
B: [["Alice", "Bob", 5], ["Bob", "Alice" 7]]
C: [["Alice", "Bob", 5], ["Bob", "Alice" 7]]
A: [["A", 2], ["B", 3], ["C", 5]]
B: [["C", "A", 2], ["B", "C", 4], ["A", "B", 2]]
C: [["C", "A", 2]]
A: [["A", 2], ["B", 3]]
B: [["A", "B", 2], ["A", "B", 2]]
C: [["A", "B", 2]]
A: [["A", 4], ["B", 0]]
B: [["A", "B", 1], ["A", "B", 5], ["A", "B", 2]]
C: [["A", "B", 1]]
A: [["A", 2], ["B", 3], ["C", 4]]
B: [["A", "B", 3], ["C", "B", 4]]
C: [["C", "B", 4]]
A: [["A", 2], ["B", 3], ["C", 4]]
B: [["A", "B", 3], ["B", "A", 4], ["C", "B" 2]]
C: []
Puntuación
Este es el código de golf , gana el código más corto en bytes en cada idioma.
A
También podría ser un diccionario o una lista de tuplas?["A", 2, "B", 3, "C", 5]
?A: [["A", 2], ["B", 3], ["C", 4]]
,B: [["A", "B", 3], ["C", "B", 4]]
,C: [["C", "B", 4]]
(una transacción válida después de una y otra inválida).Respuestas:
JavaScript (ES6),
918879 bytesGuardado 8 bytes gracias a @NahuelFouilleul
Toma entrada en la sintaxis de curry
(a)(b)
.Casos de prueba
Mostrar fragmento de código
Embellecido y comentado
fuente
a=>b=>b.filter(([x,y,z])=>(a[x]-=z)>0&a[y]>0?a[y]+=z:0,a.map(([x,y])=>a[x]=y+1))
portar la solución de Perl a JavaScript?Perl 5, 72 + 2 (-ap) = 74 bytes
pruébalo en línea
fuente
Python 2 , 103 bytes
Pruébalo en línea!
-12 gracias a los ovs .
Ya debido a restricciones de formato de salida:
De lo contrario, podría haber hecho esto por 92 bytes:
fuente
Ruby , 57 bytes
Pruébalo en línea!
Toma la entrada
A
como aHash
en el formato{"A"=>2, "B"=>3}
. La entradaB
y la salidaC
están en el formato sugerido.Explicación
fuente
C ++, 193 bytes
Ingrese A como
std::map
, B comostd::list
.Pruébalo en línea!
fuente