Terinspirasi oleh percakapan ini dalam obrolan.
Tujuan Anda dalam tantangan ini adalah untuk meniru seorang ninja dan menghitung berapa banyak kematian yang tersisa.
Spesifikasi
Ninja Anda dimulai dengan 9 kematian tersisa. Dia juga mendapatkan kesehatan awal yang integral sebagai input.
Kemudian, ia mengambil sebagai masukan daftar peristiwa dalam hidupnya yang mengubah kesehatannya. Ini bisa negatif, positif, atau nol bilangan bulat.
Pada titik mana pun, jika kesehatannya mencapai atau di bawah nol, ia kehilangan nyawa dan kesehatannya kembali ke kesehatan awal.
Program Anda harus melaporkan jumlah kematian yang ditinggalkannya. Jika dia memiliki nol atau kurang tersisa, Anda harus output dead
saja.
Ini adalah kode-golf , jadi kode terpendek dalam byte menang!
Uji Kasus
3, [] -> 9
100, [-20, 5, -50, 15, -30, -30, 10] -> 8
10, [-10, -10, -10, -10] -> 5
10, [-10, -10, -10, -10, -10, -10, -10, -10, -10] -> dead
0, [] -> dead
0, [1] -> dead
100, [10, -100] -> 9
sumber
Jawaban:
Jelly ,
302826 byteCobalah online!
Bagaimana itu bekerja
sumber
Japt,
403932 byteCobalah online!
Bagaimana itu bekerja
Ketika mencoba untuk golf malam terakhir ini (jauh dari komputer, tidak kurang), aku berlari melintasi pengganti yang menarik untuk
>0
:¬
. Pada angka, ini mengambil akar kuadrat, yang mengembalikanNaN
untuk angka negatif.NaN
adalah falsy, jadi ini mengembalikan persis sama dengan jujur / salah>0
.Memperluas trik ini sedikit lebih jauh, kita dapat mengatur ulang T untuk U IFF itu
>=0
hanya lima bytes:T¬²ªU
. Bagaimana cara kerjanya? Mari lihat:Seperti yang Anda lihat,
T¬²
kembaliNaN
jikaT
negatif; jika tidak, ia kembaliT
. KarenaNaN
dan0
keduanya palsu, ini memberikan cara mudah untuk mengatur ulang kesehatan ninjaªU
. Trik ini juga digunakan untuk mengembalikan nyawa ninja yang tersisa jika angka itu positif, atau"dead"
jika negatif.Menyatukan semua ini:
Jika input dijamin non-negatif, atau bahkan positif, kita dapat bermain golf 1 atau 4 byte:
sumber
JavaScript ES6,
62 6058 byteDisimpan 4 byte berkat produk @ETH
Coba online (Semua browser berfungsi)
Penjelasan
sumber
d--&&a
berhasil, ataub.reduce(...)&&d<1?"dead":d
?map
mengalahkanreduce
dalam sebagian besar skenario:(a,b,d=9,l=a)=>b.map(i=>l=l+i<1?d--&&a:l+i)&&d<1?"dead":d
adalah 57..reduce(...)&&
akan berhasil karena.reduce
pengembalian0
, itu tidak akan berhasil.(a,b,d=9,l=a)=>b.map(i=>l=l+i<1?d--&&a:l+i,a)|d<1?"dead":d
berhasil?CJam, 35 byte
Cobalah online!
sumber
Haskell,
817775 byteContoh penggunaan:
p 10 0 100 [-20, 5, -50, 15, -30, -30, 10]
->"8"
sumber
Pyth, 32
Perhatikan bahwa ada ruang terdepan. Ini mungkin bukan pendekatan terbaik, tetapi itu adalah hal pertama yang terlintas di benak saya. Ini mengurangi input berlebih dengan menambahkan nilai-nilai untuk kesehatan ninja, dan menambah penghitung dan mengatur ulang kesehatan ketika turun di bawah nol. Kami menambahkan nol di akhir daftar untuk menghitung jika perubahan terakhir membunuh ninja, dan kemudian hanya melakukan pengecekan untuk melihat apakah ninja sudah mati. Kasus nol kesehatan awal sulit dikodekan.
Test Suite
sumber
MATL, 32
Penjelasan
Tumpukan sekarang terlihat seperti ini (untuk input
100, [-20, 5, -50, 15, -30, -30, 10]
):Pop array dan loop
Jika kesehatannya nol, atur penghitung kematian ke nol. Penanganan kasus khusus untuk
initial health = 0
.Hapus nilai reload dari stack
Jika penghitung kematian nol atau kurang, hapus dan cetak 'mati' sebagai gantinya.
sumber
TeaScript ,
36 3431 byteMirip dengan jawaban JavaScript saya. 4 karakter terakhir adalah dekompresi string "mati".
Interpreter online TeaScript tidak mendukung input array sehingga Anda harus membuka konsol, dan menjalankannya dengan mengetik:
Penjelasan
sumber
Python 2.7,
826655106 byteTerima kasih kepada @RikerW untuk -16 byte.:(Berkat @Maltysen untuk -11 byte.:(Pertama-tama ketik kesehatan, lalu masuk, lalu acara dalam bentuk daftar.
sumber
C # 207
Mengambil input melalui aliran argumen. Argumen pertama adalah jumlah kesehatan dan sisanya adalah daftar kejadian.
Versi yang dapat dibaca / tidak diklik
Contoh:
CSharp.exe 3 => 9
CSharp.exe 100 -20 5 -50 15 -30 -30 10 => 8
(Psst.) CSharp.exe adalah nama yang digunakan sebagai contoh. Anda harus memanggil seperti ini dalam kenyataan: [program_name.exe] argumen, tanpa tanda kurung.
sumber