Ketika saya masih kecil, saya sering bermain game ini.
Aturan
Ada dua pemain (sebut saja mereka A dan B), dan masing-masing pemain menggunakan tangannya sebagai senjata. Ada tiga langkah yang mungkin:
Angkat tangan untuk memuat amunisi ke pistol Anda.
Setiap senjata mulai kosong. Memuat meningkatkan amunisi per satu.
Tangan menunjuk ke pemain lain untuk menembak.
Ini mengurangi amunisi satu per satu. Anda harus memiliki setidaknya satu unit amunisi untuk menembak.
Lengan menyilang untuk melindungi diri dari tembakan.
Kedua pemain bergerak secara bersamaan. Jika kedua pemain menembak pada saat yang sama, peluru saling mengenai, dan permainan berlanjut. Permainan berakhir ketika satu pemain menembak sementara yang lainnya memuat amunisi.
Menembak dan pistol kosong dianggap curang . Jika seorang pemain berselingkuh sementara yang lain melakukan tindakan hukum, penipu itu langsung kalah. Jika kedua pemain melakukan cheat secara bersamaan, game akan terus berlanjut.
Upaya curang tidak mengurangi amunisi, sehingga tidak akan pernah menjadi negatif.
Tantangan
Mengingat gerakan yang dilakukan oleh pemain A dan B, output yang pemain memenangkan permainan: 1
untuk pemain A, -1
untuk pemain B, dan 0
untuk hasil imbang. Anda dapat menggunakan tiga nilai pengembalian lainnya, tetapi Anda harus menyatakan jawaban yang mana yang Anda gunakan.
Gim ini dapat:
- berakhir tanpa harus memproses semua gerakan;
- tidak berakhir dengan gerakan yang diberikan, dan karenanya dianggap seri.
Input dapat diambil:
- sebagai string
- sebagai array / daftar bilangan bulat
- dengan cara lain yang tidak memproses input
Program atau fungsi penuh diizinkan. Karena ini adalah kode-golf , jawaban tersingkat dalam byte menang!
Uji kasus
A: "123331123"
B: "131122332"
-----^ Player B shoots player A and wins.
Output: -1
A: "111322213312"
B: "131332221133"
-------^ Player B cheats and loses.
Output: 1
A: "1333211232221"
B: "1213211322221"
----------^^ Both players cheat at the same time. The game continues.
Output: 0
A: "12333213112222212"
B: "13122213312232211"
| || ^---- Player A shoots player B and wins.
^-------^^------ Both players cheat at the same time. The game continues.
Output: 1
Jawaban:
Jelly,
333224 byteIni mencetak 5 bukannya -1 , dan 7 bukannya 1 . Cobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
Pyth,
48464947 byteCoba di sini!
Terima kasih kepada @isaacg untuk menghemat
24 byte!Mengambil input sebagai tuple 2 dengan daftar gerakan pemain A pertama dan gerakan pemain B kedua. Output sama dengan tantangan.
Penjelasan
Tinjauan singkat
[cheating win, fair win]
dengan nilai yang mungkin-1, 0, 1
untuk masing-masing tupel , untuk menunjukkan apakah seorang pemain menang pada titik ini (-1, 1
) atau jika permainan berlangsung (0
)[0,0]
, dan mengambil elemen non-nol pertama yang menunjukkan pemenangRincian kode
sumber
m|Fd
sama dengan|M
.M
tidak splatting juga. Btw: Masalah tentang variabel lambda yang saling bertentangan yang kita bahas dalam obrolan membebani saya beberapa byte di sini: P,1 2
sama denganS2
Python, 217 byte
Penjelasan : Mengambil A dan B sebagai daftar bilangan bulat. Cukup telusuri setiap pasangan gerakan, tambahkan atau kurangi 1 jika diperlukan dan kembali ketika seseorang menipu atau menang. Lakukan hal yang sama dua kali menggunakan yang lain untuk loop, sekali untuk langkah A dan sekali untuk langkah B. Menambahkan 1 jika x berada di bawah 0 hingga -1.
sumber
Java,
226212200196194 byte-14 bytes dengan memesan ulang logika
-12 byte terima kasih kepada Tuan Umum yang menunjukkan cara menggunakan operasi ternary untuk logika pengambilan gambar
-4 byte dengan menjejalkan logika muatan menjadi satu hubungan arus pendek jika
-2 byte karena
==1
===<2
ketika input hanya dapat1
,2
,3
Versi penggunaan dan lekukan:
Implementasi game tidak begitu mudah, tetapi sederhana. Setiap siklus, apakah operasi ini:
r
terhadap kekalahanr
tidak0
, kembali nilai karena seseorang ditipux
adalah variabel dummy yang digunakan untuk membuat kompiler, biarkan saya menggunakan ekspresi ternary.Tunggu, Java lebih pendek dari Python?
sumber
w==2&&m<1?r--:m++
int x=w==2?m<1?r--:r:m--;
maka terus gunakan x (karena ini hanya variabel dummy untuk membuat ternary beroperasi) sepertix=v==2?n<1?r++:r:n--;