pengantar
Anda mendapatkan pekerjaan sebagai menteri keuangan di negara Anda yang sudah jadi di halaman belakang Anda. Anda telah memutuskan untuk membuat bank sendiri di negara Anda untuk Anda dan teman-teman Anda yang kurang dapat dipercaya. Karena Anda tidak mempercayai teman-teman Anda, Anda telah memutuskan untuk menulis sebuah program untuk memvalidasi semua transaksi untuk menghentikan teman-teman Anda untuk menghabiskan uang yang terlalu banyak dan membuat ekonomi Anda hancur.
Tugas
Mengingat saldo awal dan semua transaksi, saring semua transaksi di mana seseorang mencoba untuk mengeluarkan uang lebih banyak dan memblokir siapa saja yang mencoba untuk mengeluarkan uang lebih banyak (ini termasuk mencoba mengeluarkan uang lebih ke rekening tertutup) agar tidak pernah menggunakan bank Anda lagi dengan memfilter transaksi di masa mendatang ke atau dari miliknya / rekening banknya.
Input output
Dua daftar A
dan B
sebagai input dan daftar C
sebagai output. A
adalah saldo awal setiap akun dengan format [["Alice", 5], ["Bob", 8], ["Charlie", 2], ...]
. B
adalah daftar transaksi dengan format di [["Bob", "Alice", 3], ["Charlie", "Bob", 5], ...]
mana ["Bob", "Alice", 3]
Bob ingin membayar unit mata uang Alice 3. C
harus memiliki format yang sama dengan B
. A
, B
dan C
mungkin dalam format apa pun yang wajar.
Uji Kasus
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: []
Mencetak gol
Ini adalah kode-golf , kode terpendek dalam byte yang menang di setiap bahasa.
A
juga kamus, atau daftar tupel?["A", 2, "B", 3, "C", 5]
?A: [["A", 2], ["B", 3], ["C", 4]]
,B: [["A", "B", 3], ["C", "B", 4]]
,C: [["C", "B", 4]]
(transaksi valid menyusul satu tidak valid).Jawaban:
JavaScript (ES6),
918879 byteDisimpan 8 byte berkat @NahuelFouilleul
Mengambil input dalam sintaks currying
(a)(b)
.Uji kasus
Tampilkan cuplikan kode
Dipercantik dan berkomentar
sumber
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))
porting solusi perl ke javascript?Perl 5, 72 + 2 (-ap) = 74 byte
coba online
sumber
Python 2 , 103 byte
Cobalah online!
-12 terima kasih kepada ovs .
Lebih lama karena batasan format keluaran:
Kalau tidak, saya bisa melakukan ini untuk 92 byte:
sumber
Ruby , 57 byte
Cobalah online!
Mengambil input
A
sebagaiHash
dalam format{"A"=>2, "B"=>3}
. InputB
dan outputC
dalam format yang disarankan.Penjelasan
sumber
C ++, 193 byte
Input A as
std::map
, B asstd::list
.Cobalah online!
sumber