Anda memutuskan untuk menyelenggarakan kejuaraan batu-kertas-gunting untuk mencari tahu siapa yang terbaik. Anda tidak ingin membiarkan keberuntungan untuk memutuskan pemenang sehingga setiap orang harus memberi Anda taktiknya secara tertulis sebelum kompetisi. Anda juga menyukai hal-hal sederhana sehingga perpindahan pesaing (menunjukkan batu, kertas, atau gunting) harus didasarkan hanya pada giliran sebelumnya (RvR, RvP, RvS, PvR, PvP, PvS, SvR, SvP atau SvS). Pada giliran pertama seorang pemain harus menunjukkan tanda yang tetap.
Anda memutuskan untuk menulis sebuah program (atau fungsi) untuk mensimulasikan kejuaraan.
Detail kompetisi
- Setidaknya akan ada 2 kontestan.
- Setiap pemain memainkan tepat satu pertandingan dengan yang lainnya.
- Satu pertandingan berlangsung 7 putaran.
- Dalam setiap putaran, pemenang mendapat 2 poin, yang kalah tidak mendapatkan poin. Dalam hal seri kedua pemain skor 1 poin.
- Skor seorang pemain dalam pertandingan adalah jumlah poinnya selama putaran pertandingan.
- Skor akhir pemain di kejuaraan adalah jumlah poinnya di semua pertandingan.
Detail input:
- program atau fungsi Anda menerima
N
10 karakter string panjang yang masing-masing sesuai dengan strategi pemain. Semua karakter (huruf kecil)r
p
ataus
artinya dalam situasi tertentu pemain akan menunjukkan kertas batu atau gunting. - Huruf pertama memberi kode giliran pertama (dalam setiap pertandingan untuk pesaing itu). Yang kedua menunjukkan apa yang terjadi jika babak terakhir adalah rock vs rock. Yang berikutnya adalah RvP, RvS, PvR, PvP, PvS, SvR, SvP dan SvS di mana huruf pertama adalah tanda pemain dan yang kedua adalah tanda lawan. Misalnya
rrpsrpsrps
berarti pemain mulai dengan batu dan kemudian menyalin gerakan terakhir lawan. - Anda dapat memasukkan daftar string sebagai daftar / larik atau data serupa bahasa Anda atau sebagai satu string. Dalam kasus terakhir beberapa jenis karakter pemisah adalah suatu keharusan.
Rincian output:
- Program atau fungsi Anda harus menampilkan skor akhir dari setiap pemain dalam urutan yang sama dengan input yang diberikan.
- Skor harus dipisahkan oleh spasi atau baris baru. Ruang tambahan atau baris baru diizinkan.
Contoh:
Memasukkan:
['rrpsrpsrps', 'rpppsprrpr']
Output:
5 9
(ternyata rvr rvp pvs svp pvr rvp pvs
)
Memasukkan:
['rrpsrpsrps', 'rpppsprrpr', 'ssssssssss']
Output:
13 17 12
(pertandingan adalah 5-9
(1 vs 2), 8-6
(1 vs 3) dan 8-6
(2 vs 3))
Ini adalah kode-golf sehingga entri terpendek menang.
sumber
6-8
dan yang kedua kalah dengan yang ketiga6-8
.Jawaban:
Python 2:
201188 karakterLogika program: saya mengkonversi huruf ke nomor (
r=0
,p=1
,s=2
).m
adalah nomor yang pertama,n
jumlah orang kedua. Karena game ini bersifat siklik,(m-n)%3
sudah menentukan hasilnya. Dan tentu saja, saya dapat mengubah hasilnya satu per satuf=(m+1-n)%3
. Sekarangf=0
berarti, pemain keduaq
menang,f=1
berarti seri, danf=2
, pemain pertamap
menang. Itu juga sudah menjadi skor untuk pemain 1. Karena itu saya hanya perlu menambahkan semua nilai(p!=q)*(m+1-n)%3
untuk setiap pemain.Uji dengan
print f(['rrpsrpsrps', 'rpppsprrpr', 'ssssssssss'])
sumber