Tujuan:
Diberi dua makhluk dengan kemampuan bertarung opsional, kembalikan nilai-nilai unik namun konsisten yang mewakili makhluk mana yang mati, jika ada.
Memasukkan:
#Longest form:
[[P,T, "<abilities>"], [P,T, "<abilities>"]]
#Shortest form:
[[P,T], [P,T]]
Setiap makhluk akan diberikan dalam bentuk [P,T,"<abilities>"]
. Itu akan dalam bentuk [P,T]
,, [P,T,""]
atau [P,T,0]
jika tidak memiliki kemampuan, pilihan Anda pada formulir. P adalah bilangan bulat> = 0, T adalah bilangan bulat> = 1. <abilities>
adalah bagian dari "DFI"
, atau dapat direpresentasikan melalui satu nomor / bitstring jika Anda inginkan. Urutan bendera juga terserah Anda.
Mekanisme Memerangi:
Setiap makhluk memiliki dua statistik, Kekuatan dan Ketangguhan dalam urutan itu, dan kemampuan opsional. Kekuatan makhluk adalah> = 0. Ketangguhan makhluk adalah> = 1.
Setiap makhluk akan secara bersamaan melakukan kerusakan yang sama dengan kekuatannya untuk makhluk lawan (kecuali jika seseorang memiliki serangan pertama). Jika nilainya lebih dari atau sama dengan ketangguhan lawan, itu akan mati (kecuali jika tidak bisa dihancurkan).
Contoh: Alice adalah a 2/2
, Bob adalah a3/4
, keduanya tanpa kemampuan. Alice akan melakukan 2 kerusakan pada Bob dan mengambil 3 kerusakan sebagai balasannya. Ketangguhan Alice adalah 2 sehingga ia akan mati, ketangguhan Bob adalah 4 sehingga ia akan hidup.
Hanya ada 3 kemampuan opsional yang akan kami pertimbangkan untuk ini (meskipun ada lebih banyak dalam permainan). Ini akan menjadi satu bendera karakter:
- [D] eathtouch: Sejumlah kerusakan (X> 0) dianggap mematikan.
- [F] Strike pertama: Akan menangani kerusakannya terlebih dahulu, mampu membunuh makhluk lain sebelum dapat menyerang kembali. Jika kedua makhluk memiliki Serangan Pertama, Selesaikan pertempuran seperti biasa.
- [I] ndestructible: Tidak ada jumlah kerusakan yang dianggap mematikan, termasuk Deathtouch.
Keluaran:
Nilai yang konsisten untuk masing-masing dari empat kasus berikut. Tolong sebutkan empat nilai dalam jawaban Anda. Contoh nilai balik dalam parens:
- Tidak ada makhluk yang mati (0)
- Makhluk ke-1 meninggal (1)
- Makhluk ke-2 meninggal (2)
- Kedua makhluk itu mati (3)
Aturan:
- Input dijamin memiliki dua makhluk yang diformat dengan benar.
- Jika Anda menggunakan karakter untuk kemampuan, Anda dapat menganggap mereka dipesan sesuai keinginan tetapi memposting urutan yang digunakan jika relevan.
- Jika Anda menggunakan angka / bitstring untuk kemampuan, poskan penyandian apa yang Anda gunakan. mis:
111
isD/F/I
,7
isD/F/I
, etc. - Jika seekor makhluk tidak memiliki kemampuan, Ia juga dapat dianggap sebagai
[P,T, ""]
atau jumlah yang setara - Standard Loopholes Forbidden
- Ini adalah kode-golf sehingga kode terpendek menang.
Contoh:
Input: [[2,2], [1,1]]
Output: 2nd Dies
Input: [[0,2], [0,1]] #0/2 vs 0/1
Output: Neither Die
Input: [[2,1], [2,1]] #2/1 vs 2/1
Output: Both Die
Input: [[1,1, "D"], [2,2]] #1/1 Deathtoucher vs 2/2
Output: Both Die
Input: [[2,2], [0,1, "D"]] #2/2 vs 0/1 Deathtoucher
Output: 2nd Dies
Input: [[2,2], [1,1, "DF"]] #2/2 vs 1/1 Deathtouch First-striker
Output: 1st Dies
Input: [[0,2, "D"], [0,1, "DF"]] #0/2 Deathtoucher vs 0/1 Deathtouch First-striker
Output: Neither Die
Input: [[2,2], [2,2, "F"]] #2/2 vs 2/2 First-striker
Output: 1st Dies
Input: [[2,2, "I"], [1,1, "DF"]] #2/2 Indestructible vs 1/1 Deathtouch First-striker
Output: 2nd Dies
Input: [[9999,9999], [1,1, "I"]] #9999/9999 vs 1/1 Indestructible
Output: Neither Die
Input: [[2,2, "F"], [1,1, "F"]] #2/2 First-Striker vs 1/1 First-Striker
Output: 2nd Dies
#9/9 Deathtouch, Indestructible First-Striker vs 9/9 Deathtouch, Indestructible First-Striker
Input: [[9,9, "DFI"], [9,9, "DFI"]]
Output: Neither Die
sumber
D => 0, F => 1, I => 2
Jawaban:
Perl 5 , 248 byte
... tanpa spasi dan baris baru:
Cobalah online!
Versi ungolfed saya dengan sepuluh tes dari @Veskah (OP), tes lolos:
sumber
JavaScript,
137125120111 byteSaya menggunakan nomor bitmap untuk kemampuan D = 4 F = 2 I = 1 lakukan
"DFI"
akan7
. Output saya adalah Tidak Meninggal0
, Meninggal 11
, Meninggal 22
, Keduanya mati3
.Tes dengan:
Ini adalah kode kerja saya yang pertama
Yang saya kurangi menjadi perantara ini:
sumber
JavaScript (ES6),
8376 byteMengambil input sebagai 6 argumen berbeda: 2 x (Power, Toughness, Abilities). Kemampuan diharapkan sebagai bitmasks dengan:
Cobalah online!
Berkomentar
sumber
C (gcc) ,
11411395 byteBanyak bermain golf berkat ceilingcat dan Logern.
Kompilasi dengan
-DZ=P,T,F,p,t,f)
.Cobalah online!
Kami memeriksa (secara independen, karena simetri mekanisme pertempuran) apakah masing-masing makhluk selamat dari pertempuran, yang terjadi jika keduanya benar:
(Kondisi sebelumnya lebih penting).
Inputnya adalah kekuatan dan ketangguhan sebagai bilangan bulat, dan kemampuan sebagai bitfield (1 = Tidak bisa dihancurkan, 2 = Sentuhan maut, 4 = Serangan pertama), outputnya juga merupakan bitfield (1 = Makhluk pertama bertahan, 2 = Makhluk kedua bertahan).
sumber
-DZ=P,T,F,p,t,f)
96 byte-Cobalah secara online!P=…
alih-alihreturn …
dan menghapus baris baru membawa Anda ke 85 byte.&&
,||
dengan bitwise&
,|
Retina 0.8.2 , 123 byte
Cobalah online! Link meliputi uji kasus, meskipun saya sudah diganti
9
untuk99999
untuk kecepatan. Masukan menggunakan hurufDFI
meskipunD
harus mendahuluiI
. Output dalam format1
untuk bertahan dan0
untuk mati. Penjelasan:Mengkonversi statistik untuk unary.
Bertukar statistik sementara.
Dua
F
s membatalkan.Death Touch menurunkan Ketangguhan lawan menjadi 1.
menurunkan indestructable Daya lawan untuk 0.
Beralih kembali Ketangguhan, jadi sekarang Anda memiliki P2, T1, F1, P1, T2, F2
Jika Ketangguhan lebih tinggi dari lawan Daya maka bertahan.
Jika kedua akan mati, satu dengan First Strike bertahan.
Kalau tidak, First Strike tidak ada bedanya.
sumber
C ++,
177131127121 byteInilah solusi tidak begitu singkat saya di C ++. Kemampuan adalah 3 bit untuk setiap makhluk:
Dan itu hanya mengembalikan 0 : jika mati tidak ada, 1 : jika pertama makhluk mati, 2 : jika mati makhluk kedua dan 3 : jika kedua makhluk mati.
Cobalah online!
C ++,
8581 bytes (Alternatif)Dengan sedikit kecurangan dan menangkap variabel dalam lambda dan tidak lulus mereka sebagai argumen adalah mungkin untuk turun ke 81 byte. Saya tidak tahu apakah itu solusi yang dapat diterima jadi saya posting sebagai alternatif.
Cobalah online!
sumber
Perl 5, 245 byte
Jalankan dengan
-lapE
Tidak Terkumpul:
"Deathtouch" diterjemahkan menjadi "kekuatan Anda sekarang dikalikan dengan ketangguhan musuh Anda", dan "dihancurkan" diterjemahkan menjadi "kekuatan musuh Anda sekarang nol", dengan mengambil preseden yang terakhir. Kode berjalan dua putaran, di mana hanya yang pertama-striker mendapatkan serangan, dan lainnya di mana hanya non-pertama-striker dapat menyerang. Jika hasil putaran pertama di kematian, putaran kedua tidak terjadi. Karena kita sudah ditangani dengan deathtouch dan dihancurkan di awal, "kematian" adalah yang sederhana seperti memeriksa apakah ketangguhan lebih besar dari nol atau tidak.
sumber