Introdução
Você conseguiu um emprego como ministro das Finanças no seu país inventado no seu quintal. Você decidiu criar seu próprio banco em seu país para você e seus amigos menos confiáveis. Como você não confia em seus amigos, decidiu escrever um programa para validar todas as transações para impedir que seus amigos gastem demais sua moeda inventada e arruinem sua economia.
Tarefa
Dado o saldo inicial e todas as transações, filtre todas as transações em que alguém tenta gastar mais e bloqueie qualquer pessoa que tente gastar mais (isso inclui tentar gastar mais em uma conta fechada) de nunca mais usar o seu banco, filtrando transações futuras de ou para as dele. / sua conta bancária.
Entrada / Saída
Duas listas A
e B
como entrada e uma lista C
como saída. A
é o saldo inicial de cada conta com o formato [["Alice", 5], ["Bob", 8], ["Charlie", 2], ...]
. B
é uma lista de transações com o formato [["Bob", "Alice", 3], ["Charlie", "Bob", 5], ...]
em ["Bob", "Alice", 3]
que significa que Bob deseja pagar a Alice 3 unidades monetárias. C
deve ter o mesmo formato que B
. A
, B
E C
podem estar em qualquer formato razoável.
Casos de teste
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: []
Pontuação
Este é o código-golfe , o código mais curto em bytes em cada idioma vence.
A
Também pode ser um dicionário ou uma 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]]
(uma transação válida após um um inválido).Respostas:
JavaScript (ES6),
918879 bytesGuardado 8 bytes graças a @NahuelFouilleul
Recebe entrada na sintaxe de currying
(a)(b)
.Casos de teste
Mostrar snippet de código
Embelezado e comentado
fonte
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 solução perl para javascript?Perl 5, 72 + 2 (-ap) = 74 bytes
experimente online
fonte
Python 2 , 103 bytes
Experimente online!
-12 graças a ovs .
Mais devido a restrições de formato de saída:
Caso contrário, eu poderia ter feito isso por 92 bytes:
fonte
Ruby , 57 bytes
Experimente online!
Recebe a entrada
A
como aHash
no formato{"A"=>2, "B"=>3}
. EntradaB
e saídaC
estão no formato sugerido.Explicação
fonte
C ++, 193 bytes
Entrada A as
std::map
, B asstd::list
.Experimente online!
fonte