Percaya atau tidak, Sex Bob-ombs telah menjadi band terkenal di dunia dan saat ini sedang dalam tur dunia! Sebagai pemegang buku, Anda harus mengawasi keuangan mereka sehari-hari dan memberikan laporan rutin.
Setiap beberapa minggu Anda menyusun daftar pengeluaran mereka (dalam seluruh USD ) sesuai urutan pengeluaran.
Misalnya, daftarnya
378
-95
2234
berarti bahwa $ 378 disetor ke akun mereka, dan setelah itu $ 95 ditarik, dan setelah itu $ 2234 disetor.
Anda ingin memastikan bahwa jumlah menjalankan nilai-nilai ini tidak pernah berjalan di bawah beberapa nilai ambang batas T . Anda memutuskan untuk menulis sebuah program untuk melakukan ini untuk Anda.
Tantangan
Tulis program atau fungsi yang mengambil dalam bilangan bulat tunggal T dan daftar bilangan bulat. Jika jumlah berjalan dari daftar bilangan bulat kurang dari T , maka cetak atau kembalikan nilai yang salah , cetak atau kembalikan nilai yang sebenarnya.
Anda dapat menggunakan metode input yang biasa (stdin, dari file, baris perintah, argumen berfungsi).
- Pada awal daftar jumlah berjalan adalah 0. Jadi T positif berarti hasilnya selalu palsu.
+
tidak akan pernah di depan bilangan bulat positif.- Daftar ini dapat berisi 0.
- Daftarnya mungkin kosong.
Uji Kasus
T adalah -5 dalam semua ini.
Falsy:
-6
1
2
3
-20
200
-300
1000
Benar:
[empty list]
-5
4
-3
-6
Mencetak gol
Kiriman dengan byte paling sedikit menang. Tiebreaker pergi ke kiriman diposting paling awal.
sumber
Jawaban:
gs2 - 6 byte
Asumsikan daftar ada di atas tumpukan, dan ambangnya ada di register A. Dalam mnemonik:
Dalam bytecode:
sumber
inits
seperti di Haskell:"abcd" inits
→["" "a" "ab" "abc" "abcd"]
memberi kita semua awalan. Kemudian kita memfilter dengan "lambda" dari tiga perintah, yang ada__ __ __ F2
dalam bytecode: kita mencari semua awalan yang jumlahnya kurang dari apa pun yang adaA
. Kemudiannot
tentukan apakah daftar tersebut kosong.Haskell, 22 byte
Penggunaan:
f (-5) [4,-3,-6]
output manaTrue
.Buat daftar sub-total dan periksa apakah semua elemen>> t.
Edit: Bugfix untuk daftar kosong dan positif
t
ssumber
0
tidak ada dalam daftar, karenascanl1
mengembalikan daftar kosong jika diberi makan dengan daftar kosong, tetapiall
menangkap kasing itu.f (-5) []
kembaliTrue
.Python 2, 41
Argumen pertama adalah array; yang kedua adalah total minimum berjalan.
sumber
J, 11 byte
Tes
Peningkatan 1 byte berkat FUZxxl .
Penjelasan untuk versi aslinya
(*/@(<:0,+/\))
+/\
membuat jumlah yang berjalan (jumlah+/
awalan\
)0,+/\
menambahkan 0 ke jumlah berjalan(<:0,+/\)
input sisi kiri lebih kecil atau sama dengan<:
(elemen dari) hasil0,+/\
input sisi kanan@
dengan hasil sebelumnya*/
produk dari semua elemen (1 jika semua elemen adalah 1, 0 jika suatu elemen adalah 0)sumber
*/@:<:0,+/\
untuk satu karakter, saya pikir.APL,
810Ini adalah fungsi yang mengambil
T
argumen kiri dan daftar sebagai argumen kanannya.0,+\
: menjalankan jumlah argumen yang benar, ditambahkan ke 0∧.≤
: argumen kiri lebih kecil atau sama (≤) dari semua (∧) item dalam argumen kanansumber
Mathematica, 34 byte
Ini mendefinisikan fungsi variadik tanpa nama yang mengambil
T
sebagai parameter pertama dan transaksi sebagai parameter yang tersisa, dan mengembalikan boolean:Saya suka ini karena saya bisa menggunakan yang agak jarang
##2
yang "menyemprotkan" semua argumen dari yang kedua ke dalam daftar. Untuk lebih jelasnya lihat bagian terakhir di tip golf ini .sumber
k, 8 char
Kata kerja dyadic yang menggunakan ambang sebagai argumen pertama dan daftar sebagai yang kedua. Hebatnya, ini bekerja di setiap versi k, termasuk Kona open-source.
Dalam k, komposisi fungsi hanya dilakukan dengan menulis satu dan kemudian yang lain, sehingga kita dapat memecahnya dengan fungsi. Dari kanan ke kiri:
-\,
mengambil jumlah lari berturut-turut dan mengurangi mereka dari ambang batas. (Jikaf
bersifat diadik, kemudianf\ (a; b; c; ...)
berkembang menjadi(a; a f b; (a f b) f c; ...)
.,
Cukup gabungkan daftar bersama-sama.) Breaking bahkan terjadi ketika sesuatu sama dengan 0, dan penarikan berlebih memberikan nilai yang benar-benar positif.~0<
Bukan 0 Kurang Dari. k tidak benar-benar memiliki<=
operator yang lebih besar dari atau sama dengan , jadi kita harus melempar Boolean TIDAK pada yang kurang dari, tetapi ini menguji apakah hasilnya tidak positif. Secara otomatis berlaku untuk setiap atom dalam daftar.&/
adalah lipatan logis DAN daftar. (Untukf
diad) Jadi ini menguji apakah setiap boolean dalam daftar adalah Benar.Contoh:
sumber
~|/>+\,
>
adalah "permutasi descending sort" jadi~|/>+\,
berikan true hanya ketika daftar input kosong ...CJam, 17 byte
Mengambil input sebagai integer dan larik gaya CJam di STDIN:
Uji di sini.
sumber
Pyth,
1615Cobalah online dengan input
Penjelasan:
Dan lagi
s
fungsi bodoh membuang dua byte. Saya pikir saya akan melaporkan ini sebagai bug ke repo Pyth.edit: 13 (tidak valid)
Terima kasih kepada isaacg untuk menyimpan satu byte (
>1
ke!
) dan untuk mengubah implementasis
di repo Pyth. Sekarang kode berikut ini dimungkinkan (tetapi tentu saja tidak valid untuk tantangan ini).sumber
!
alih-alih>1
.#sY
. Dan terima kasih untuk save 1 byte.R, 35
Coba di sini
sumber
Julia, 33 byte
Ini menciptakan fungsi tanpa nama yang menerima dua parameter,
T
danl
, dan mengembalikan boolean.The
all()
fungsi melakukan semua angkat berat di sini. Dibutuhkan dua argumen: predikat dan iterable. Untuk predikat, kami beri tahu yangi
mewakili nilai saat ini dari iterable menggunakan fungsi yang tidak disebutkan namanya, ditentukan olehi->
. Kemudian pada setiap iterasi kita membandingkani
keT
menggunakani>=T
.Untuk memastikan bahwa Julia tidak takut menggunakan
cumsum()
daftar kosong, kita bisa menggunakan nol di sana menggunakan[0, l]
.sumber
Prelude ,
144136 byteIni ... sulit ...
Saya pikir 6 suara adalah rekor baru bagi saya, meskipun saya yakin ada cara untuk mengurangi itu dan menyingkirkan banyak ruang kosong yang mengganggu itu. Memeriksa tanda suatu nilai (dan karenanya, memeriksa apakah satu nilai lebih besar dari yang lain) cukup sulit di Prelude.
Input dan output diberikan sebagai nilai byte. Ketika Anda menggunakan interpreter Python , Anda bisa mengatur
NUMERIC_OUTPUT = True
, sehingga Anda benar-benar mendapatkan ASCII0
atau1
. Untuk input numerik, Anda harus menambahkanNUMERIC_INPUT
flag lain (saya mungkin harus menerbitkan penerjemah tweak saya di beberapa titik).Perhatikan juga bahwa Pendahuluan tidak dapat benar-benar membedakan akhir daftar dari
0
dalam daftar. Jadi untuk memungkinkan nol transaksi, saya membacaT
, lalu panjangL
daftar, dan kemudianL
transaksi.sumber
CJam, 18 byte
Pendekatan lain dalam byte yang sama dengan yang lain.
Mengambil input melalui STDIN dalam bentuk
<threshold> <array of transactions>
Cobalah online di sini
sumber
f>:|!
sebagai gantinya:)f<:&
JavaScript (ES6) 38
33Edit bug keseimbangan awal diperbaiki. Thx @martin & @rainbolt
Uji di Firefox / konsol FireBug
sumber
Python 2.7 - 55 byte
Sebut seperti
print f(-5,[1,2,3,-20])
. Menguji sini .Terima kasih kepada Jakube untuk membantu.
sumber
> <>, 29 + 3 = 32 byte
Jalankan seperti
di mana ambangnya adalah angka pertama.
sumber
Oktaf, 27
sumber
Perl 6 (21 byte)
Ini adalah fungsi yang mengambil argumen awal, dan daftar elemen. Ini bekerja dengan memeriksa jika tidak ada ( dengan menggunakan persimpangan ) elemen di bawah ambang batas.
[\+]
digunakan untuk menghasilkan jumlah berjalan, misalnya[\+] 1, 2, 3
memberi1, 3, 6
.0,
untuk menambahkan0
pada awal daftar diperlukan karena persyaratan bahwa ambang positif selalu harus gagal.Hampir sama dengan solusi Haskell, hanya dalam sintaks Perl 6 (Perl 6 mengambil begitu banyak fitur pemrograman yang rapi dari Haskell).
sumber
Perl - 20
Ambil daftar angka pada
STDIN
dipisahkan oleh baris baru dan ambilT
dengan-i
bendera.+2 untuk
-i
dan-n
bendera. Nilai keluar adalah255
untuk kegagalan dan0
kesuksesan.Jalankan dengan:
sumber
Clojure, 45
Misalnya
Atau sedikit lebih baik;
sumber
Java 8 - 153 karakter
Fungsi golf:
Tidak Disatukan:
Program pengemudi:
}
Keluaran:
sumber