Einführung
Sie haben einen Job als Finanzminister in Ihrem erfundenen Land in Ihrem Hinterhof bekommen. Sie haben beschlossen, in Ihrem Land eine eigene Bank für Sie und Ihre weniger vertrauenswürdigen Freunde zu gründen. Da Sie Ihren Freunden nicht vertrauen, haben Sie beschlossen, ein Programm zur Validierung aller Transaktionen zu schreiben, um zu verhindern, dass Ihre Freunde Ihre erfundene Währung zu viel ausgeben und Ihre Wirtschaft ruinieren.
Aufgabe
Filtern Sie unter Berücksichtigung des Anfangsbestands und aller Transaktionen alle Transaktionen heraus, bei denen jemand versucht, einen Mehrbetrag auszugeben, und verhindern Sie, dass jemand, der einen Mehrbetrag auszugeben versucht (dies schließt den Versuch ein, einen Mehrbetrag auf einem geschlossenen Konto auszugeben), Ihre Bank jemals wieder nutzt, indem Sie zukünftige Transaktionen an oder von seiner Bank herausfiltern / ihr Bankkonto.
Input-Output
Zwei Listen A
und B
als Eingabe und eine Liste C
als Ausgabe. A
ist der Startsaldo jedes Kontos mit dem Format [["Alice", 5], ["Bob", 8], ["Charlie", 2], ...]
. B
ist eine Liste von Transaktionen mit dem Format, [["Bob", "Alice", 3], ["Charlie", "Bob", 5], ...]
bei ["Bob", "Alice", 3]
denen Bob Alice 3 Währungseinheiten bezahlen möchte. C
sollte das gleiche Format haben wie B
. A
, B
Und C
kann in jedem angemessenen Format vorliegen.
Testfälle
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: []
Wertung
Dies ist Code-Golf , der kürzeste Code in Bytes in jeder Sprache gewinnt.
A
auch ein Wörterbuch oder eine Liste von Tupeln sein?["A", 2, "B", 3, "C", 5]
?A: [["A", 2], ["B", 3], ["C", 4]]
,B: [["A", "B", 3], ["C", "B", 4]]
,C: [["C", "B", 4]]
(eine gültige Transaktion nach einem unwirksamen).Antworten:
JavaScript (ES6),
918879 Byte8 Bytes dank @NahuelFouilleul gespeichert
Übernimmt Eingaben in der Currying-Syntax
(a)(b)
.Testfälle
Code-Snippet anzeigen
Verschönert und kommentiert
quelle
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))
Portierung von Perl-Lösung auf Javascript?Perl 5, 72 + 2 (-ap) = 74 Bytes
versuche es online
quelle
Python 2 , 103 Bytes
Probieren Sie es online!
-12 dank ovs .
Länger aufgrund von Ausgabeformateinschränkungen:
Sonst hätte ich das für 92 Bytes machen können:
quelle
Ruby , 57 Bytes
Probieren Sie es online!
Übernimmt die Eingabe
A
alsHash
im Format{"A"=>2, "B"=>3}
. Ein-B
und AusgabeC
im vorgeschlagenen Format.Erläuterung
quelle
C ++, 193 Bytes
Eingabe A wie
std::map
, B wiestd::list
.Probieren Sie es online!
quelle