Temukan hasil permainan Perang
Ketika saya masih di sekolah dasar, ada permainan "Rock-Paper-Scissors" yang akan kami mainkan saat kebaktian, ketika menunggu guru kami, saat istirahat dll. Kami menyebutnya "Perang". Namun setelah beberapa pencarian, ternyata ini adalah varian yang lebih sederhana dari "Shotgun Game" (menurut WikiHow) . Saya akan menyebutnya "Perang" karena aturannya sedikit berbeda:
2 orang duduk berhadapan. Tujuan permainan ini adalah untuk "membunuh" pemain lain. Setiap belokan, Anda dapat memainkan salah satu dari 3 gerakan:
Muat ulang : Anda memiliki senjata yang menahan satu tembakan. Itu harus dimuat ulang sebelum dapat dipecat setiap kali. Memuat ulang saat Anda sudah memiliki amunisi adalah legal, tetapi tidak melakukan apa-apa. Muat ulang dilambangkan dengan mengetuk pelipis Anda dengan kedua tangan. Setiap pemain mulai dengan 0 amunisi.
Penjaga : Satu-satunya langkah aman. Jika Anda ditembak saat menjaga, Anda tidak mati. Pelindung dilambangkan dengan menyilangkan tangan di dada.
Api : Menembakkan pistol Anda. Agar berhasil menembak, Anda harus memuat ulang sejak tembakan terakhir. Jika lawan Anda memuat ulang, Anda menang. Jika mereka juga menembak, dan Anda berdua memiliki amunisi, itu seri. Jika mereka menjaga, Anda membuang amunisi. Meskipun menembak tanpa amunisi adalah langkah legal, ia tidak melakukan apa-apa dan membuat Anda rentan seperti memuat ulang. Menembak dilambangkan dengan menunjuk pemain lain.
Itu dimainkan mirip dengan RPS, di mana setiap pemain secara bersamaan melempar pilihan mereka (kami mengetuk kaki kami dua kali di antara putaran untuk menjaga ritme satu sama lain, tapi itu tidak penting untuk tantangan).
Tantangan:
Tugas Anda adalah menemukan hasil permainan War. Ini bisa berupa fungsi atau program lengkap.
Memasukkan
Opsi setiap pemain memilih setiap belokan akan diwakili oleh karakter / string:
r : memuat ulang
g : penjaga
f : api
Input akan berupa daftar pasangan, string yang dibatasi / tidak didahului, atau apa pun di sepanjang baris ini.
Contoh input dengan Python bisa [("r", "g"), ("f", "r")]
, artinya pada giliran pertama pemain pertama dimuat ulang, dan pemain kedua dijaga. Pada belokan kedua, pemain pertama menembak, sementara pemain kedua memuat ulang. Pemain satu memenangkan permainan ini. Input yang sama bisa pilih dapat direpresentasikan sebagai "r g f r"
, "rgfr"
, "rg fr"
"rg-fr"
...
Anda dapat mengasumsikan sebagai berikut:
Input akan cocok dengan format yang Anda pilih, dan itu hanya akan berisi karakter yang valid.
Seseorang akan mati dalam 100 putaran.
Namun Anda tidak dapat mengasumsikan bahwa belokan berakhir ketika seseorang meninggal.
Keluaran
Nilai yang menunjukkan siapa yang menang (atau, siapa yang menang lebih dulu *
). Anda dapat memilih apa yang akan dihasilkan untuk setiap skenario, tetapi harus memperhitungkan yang berikut ini:
Pemain 1 menang
Pemain 2 menang
Mereka saling membunuh (menggambar)
Setiap hasil harus memiliki nilai distrik, dan harus selalu sama untuk setiap skenario.
Sebagai contoh: Anda bisa menampilkan 1
kapan pemain 1 menang, 2
ketika pemain 2 menang, dan 0
dalam hal seri. Anda kemudian harus selalu menampilkan 1
kapan pemain 1 menang, 2
ketika pemain 2 menang, dan 0
dalam hal imbang.
Itu dapat dikembalikan, atau dicetak ke stdout. Trailing whitespace baik-baik saja.
Sedemikian jelasnya, satu-satunya skenario yang mengarah pada hasil imbang adalah jika kedua pemain menembak, dan keduanya memiliki amunisi.
*
Karena dalam tantangan ini, belokan dapat berlanjut setelah seseorang meninggal, mungkin lebih dari 1 pemain akhirnya bisa menang. Anda perlu menemukan siapa yang menang terlebih dahulu sesuai dengan input.
Uji Kasus (dengan asumsi 1
ketika P1 menang, 2
ketika P2 menang, dan 0
untuk seri):
"rg fr" => 1 (P1 shot P2 while they were reloading)
"rg ff" => 1 (They both shot, but only P1 had ammo)
"rr ff" => 0 (Both had ammo and shot each other)
"rr ff rr fg" => 0 (Both had ammo and shot each other. Everything after the first win is ignored)
"rr fg rf" => 2 (P2 shot P1 while they were reloading)
"rf gg rr fg rr fr" => 1
(P2 tried to shoot but didn't have any ammo, then they both guarded, then they both reloaded, then P2 blocked a shot, then they both reloaded again [but P2 still only has 1 ammo!], then P1 shoots P2 while they're reloading.
"rr gf fr rf gg rg ff" => 1
^ Player 1 wins here. The rest to the right has no effect on the output
Ini adalah kode golf, sehingga jumlah byte terkecil menang!
Catatan, seperti yang ditunjukkan oleh kasus uji, Anda harus menangani gerakan "bodoh". Ini benar-benar berlaku bagi seorang pemain untuk mencoba menembak ketika mereka tidak memiliki amunisi, atau memuat ulang 2 putaran berturut-turut (dan hanya mengumpulkan satu amunisi tunggal).
{"rff","rgf"}
?