Dalam putaran latihan dilema tahanan , masing-masing dua pemain memutuskan apakah akan bekerja sama atau membelot untuk putaran itu. Skor untuk satu ronde adalah:
- Player A dan Player B bekerja sama: 1 poin untuk keduanya
- Player A dan Player B keduanya cacat: 2 poin untuk keduanya
- Player A bekerja sama dan Player B cacat: 3 poin untuk bekerja sama Player A dan 0 poin untuk membelot Player B
Anda tidak perlu khawatir tentang strategi: program Anda hanya akan mentabulasi skor untuk sebuah game. (Jika Anda sudah terbiasa dengan dilema tahanan, "poin" saya di sini sesuai dengan "tahun penjara.")
Tantangan Anda adalah mengambil input yang mewakili pilihan pemain selama beberapa ronde dan menghitung skor total masing-masing. Satu pemain mengirimkan pilihan dalam huruf kecil, cdan d(untuk bekerja sama dan cacat ), dan yang lain mengirimkan pilihan dalam huruf besar, Cdan D. Pilihan ini disediakan untuk program Anda sebagai string.
Biasanya, pemain dalam dilema narapidana menyerahkan gerakan mereka secara bersamaan dan berulang. Namun, dalam tantangan ini, para pemain mungkin telah menyerahkan pilihan mereka untuk beberapa putaran sekaligus. Jika gerakan pemain di luar urutan, program penilaian akan mengingatnya dan mencocokkannya dengan gerakan berikutnya yang tersedia dari pemain lawan.
Ini contoh string input:
cDCddDDCcCc
Untuk menunjukkan kecocokan yang ada dalam input ini, saya akan memanggil huruf kecil dan besar secara terpisah, dan memasangkannya:
cDCddDDCcCc
c dd c c => cddcc
DC DDC C => DCDDCC
Ini akan dipasangkan ke dalam putaran:
c vs D (3 pts for lowercase-player, 0 pts for uppercase-player)
d vs C (0 pts for lowercase-player, 3 pts for uppercase-player)
d vs D (2 pts for both)
c vs D (3 pts for lowercase-player, 0 pts for uppercase-player)
c vs C (1 pt for both)
Yang menghasilkan skor 9(huruf kecil) ke 6(huruf besar), sehingga output harus 9,6(atau pembatas yang tidak ambigu).
Untuk mengekspresikannya dengan cara lain, berikut adalah masing-masing pasangan menarik pada barisnya sendiri:
cDCddDDCcCc
cD
Cd
dD
D c
C c
Ada satu yang tak tertandingi C, karena pemain huruf besar mengirim lebih banyak gerakan daripada pemain huruf kecil. Itu bisa diterima, dan itu benar-benar diabaikan untuk tujuan penilaian.
Berikut persyaratannya:
Anda harus menulis program atau fungsi yang menerima string dari bentuk ekspresi reguler
/[cdCD]+/, melalui beberapa mekanisme input (STDIN, argumen fungsi, baca dari file, dll.). (Program Anda secara opsional dapat menerima input dengan baris baru yang tertinggal.)Program atau fungsi Anda harus menampilkan atau mengembalikan skor pemain sebagai string. Format output harus dimulai dengan skor pemain huruf kecil, diikuti oleh skor pemain huruf besar, dipisahkan oleh pembatas non-kosong, non-numerik pilihan Anda. (Baris baru tambahan adalah opsional.)
Jika satu pemain memiliki lebih banyak gerakan daripada yang lain, kelebihan gerakan diabaikan.
Jika semua gerakan dalam input hanya dari satu pemain (yaitu, tidak ada putaran yang dimainkan sama sekali), maka skor setiap pemain adalah
0.Pengajuan terkecil dalam byte akan menang.
Uji kasus
Input: cDCddDDCcCc
Output: 9,6 -- or any delimiter; I chose commas here
Input: cccDDD
Output: 9,0
Input: DDDDDDccc
Output: 9,0
Input: cDcDcD
Output: 9,0
Input: dcDDC
Output: 5,2
Input: CcdCDDcd
Output: 6,6
Input: Ddd
Output: 2,2
Input: ccccccccccc
Output: 0,0
(0,0)atau [0,0]OK untuk output?
