Tantangan Diambil dengan izin dari Kontes Tantangan Kode Universitas saya
Setelah menyelesaikan studinya beberapa bulan yang lalu, Marie membuka rekening bank untuk mulai menerima pembayaran pekerjaan pertamanya di kota. Sejak itu dia telah melakukan beberapa transaksi dengannya. Pembayaran pertamanya adalah $ 1000 dolar. Dengan uang itu dia membayar untuk makan malam di mana dia mengundang orangtuanya (Makan malam biaya $ 150), kemudian, dia melakukan pembelian di supermarket terkenal ($ 80) dan pemesanan hotel untuk liburannya ($ 200). Pada akhir bulan dia menerima pembayarannya lagi (1040 dolar, sedikit lebih banyak dari bulan sebelumnya) dan sehari setelah dia menghabiskan lagi $ 70 dolar di supermarket.
Hari ini, dia menyadari bahwa jika setelah membayar $ 80 pertama di supermarket, akun kedua telah dibuat dan yang pertama dibekukan, kedua akun akan memiliki saldo yang sama persis:
Acara itu sangat langka baginya sehingga dia ingin terus memastikan apakah pergerakan akunnya dan teman-temannya juga memiliki fitur ini atau tidak.
Tantangan
Diberikan daftar transaksi, hasilkan jumlah instance waktu di mana pemilik rekening bank dapat membuat akun kedua sehingga keduanya memiliki saldo akhir yang sama.
Contoh: [1000, -150, -80, -200, 1040, -70]
Kasus cobaan
- Input:
1000 -150 -80 -200 1040 -70
Keluaran:1
- Input:
100 -100
Keluaran:2
- Input:
1 2 3
Keluaran:1
- Input:
10 -20 15
Keluaran:0
- Input:
15 -15 15 -15
Keluaran:3
- Input:
1
Keluaran:0
Catatan
- Anda dapat mengasumsikan tidak akan ada transaksi $ 0 dolar
- Anda dapat mengambil input dengan cara apa pun yang masuk akal
Jawaban:
C # (Visual C # Interactive Compiler) , 63 byte
Disimpan 6 byte berkat dana
Cobalah online!
sumber
Perl 6 , 25 byte
Cobalah online!
Penjelasan
Kami hanya menambahkan nol ke daftar yang diberikan (
0,|$_
), membuat urutan jumlah parsial dengan[\+]
(yaitu urutan yang dibentuk oleh elemen pertama, jumlah dua pertama, jumlah tiga pertama dll), dan mencari (grep
) untuk setiap elemen yang persis sama dengan setengah dari status akun akhir (jumlah dari daftar yang diberikan). Akhirnya, kami menghitungnya dengan a+
.sumber
05AB1E , 11 byte
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
Jelly ,
116 byteCobalah online!
sumber
JavaScript (Node.js) , 45 byte
Cobalah online!
Hemat 4 byte dengan menggunakan
-~o[s]
. Terima kasih untuk Shaggy.sumber
+
diubah menjadi!
, jadi itu bisa berfungsi untuk input[100]
.Perl 5
-p
,4241 byte@NahuelFouilleul menghemat satu byte
Cobalah online!
sumber
y/ /+/;
menghemat 1 byteJavaScript (ES6), 52 byte
Cobalah online!
Berkomentar
Versi rekursif,
5453 byteCobalah online!
sumber
APL (Dyalog Unicode) , 21 byte SBCS
Fungsi awalan diam-diam anonim
Cobalah online!
⍳
ɩ ndices∘
dari≢
penghitungan transaksi0,
nol di depan⊂(
...)¨⍨
menerapkan fungsi diam-diam berikut dengan masing-masing sebagai argumen kiri dan seluruh daftar transaksi sebagai argumen benar (⍨
argumen swap⊂
seluruh daftar transaksi(
...)
sebagai argumen kiri ke fungsi di bawah ini¨
berlaku untuk masing-masing indeks⍨
dengan argumen bertukar (mis. daftar di kanan, indeks di sebelah kiri:↓
jatuhkan sebanyak itu dari kiri1⊥
jumlah (lit. evaluasi dalam basis-1)(
... Apakah)=
(0/1) sama dengan ...↑
ambil banyak transaksi dari kiri+/
jumlahkan mereka+/
jumlah daftar Boolean itu untuk mendapatkan hitungan kebenaransumber
Batch, 84 byte
Mengambil input sebagai argumen baris perintah. Penjelasan:
Gabung argumen dengan spasi.
Ganti spasi dengan
+
s dan evaluasi hasilnya. Hapus juga hitungannya.Untuk setiap jumlah, kurangi dua kali lipat dari jumlah. Jika hasilnya nol, maka ini adalah kecocokan yang valid, jadi tambah hitungannya. Nol ekstra di awal memungkinkan pertandingan sebelum jumlah berapapun.
Cetak hasilnya.
sumber
Arang , 15 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Sayangnya dalam Charcoal
Sum([])
tidak0
begitu saya harus memastikan bahwa selalu ada setidaknya satu elemen untuk dijumlahkan.sumber
Python 3 ,
6758 byteCobalah online!
-9 byte terima kasih kepada @ Jangan menjadi x-triple dot
sumber
lambda l:sum(sum(l[:x])==sum(l[x:])for x in range(len(l)+1))
.sum(l[:x])*2==sum(l)
menghemat 2 byte lagi.R ,
5037 byteCobalah online!
sumber
MATL , 9 byte
Cobalah online!
Pendekatan yang sama seperti beberapa jawaban lain: tambahkan nol, dan periksa seberapa sering setengah jumlah kumulatif sama dengan jumlah total.
sumber
Japt
-x
,1411 byteCobalah
sumber
PowerShell ,
8882 byte-6 Bytes berkat mazzy
Cobalah online!
Ini sepertinya metode yang sangat kikuk tetapi menyelesaikan pekerjaan. Saya akan mencoba dan merubahnya di masa depan.
sumber
$i+=<predicate>
sebagai gantinyaif(<predicate>){$i++}
PowerShell ,
494536 byteCobalah online!
sumber
Brachylog , 9 byte
Tidak sebagus hari 1. Yang ini kalah dari Jelly
Penjelasan
Test suite: Coba online!
sumber
bash, 52 byte
TIO
Caranya: pengaturan
IFS=+
,"$*"
memperluas ke string di mana argumen dibatasi oleh+
, dalam ekspresi aritmatika eval ke jumlahsumber
Haskell,
4635 byteCobalah online!
sumber
J , 19 byte
Cobalah online!
penjelasan
sumber