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, c
dan d
(untuk bekerja sama dan cacat ), dan yang lain mengirimkan pilihan dalam huruf besar, C
dan 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?Jawaban:
Pyth, 23 byte
Suite uji
Penjelasan:
@Gz
: Huruf kecil-zG
: Huruf besarC,
: Pasangkan, potong sisanya.`
: Ambil representasi string dari daftar pasangan/L ... "cDDCdd
: Untuk setiap huruf dalam"cDDCdd"
, hitung berapa kali muncul dalam string di atas.c2
: Potong daftar yang dihasilkan menjadi dua.sM
: Tambahkan masing-masing setengahnya.j
: Gabung di baris baru dan cetak.`Harus digunakan sebagai ganti s untuk membuat kasus di mana satu pihak tidak pernah bermain bekerja.
sumber
Haskell,
139134 byteContoh penggunaan:
f "cDCddDDCcCc"
->"9,6"
15 byte hanya untuk mendapatkan format output yang benar, yaitu mengubah sepasang angka
(x,y)
menjadi sebuah string"x,y"
.Bagaimana itu bekerja:
Sunting: @Zgarb membantu saya menghemat 5 byte. Terima kasih!
sumber
LabVIEW, 77 Bytes
Kode memindai dari token dan menggunakan indeks tersebut untuk memutuskan ke mana titik pergi.
Hitungannya seperti ini
sumber
Python 3, 110
Disimpan 5 Bytes berkat FryAmTheEggman.
Disimpan 7 Bytes berkat apsillers.
Disimpan 26 Bytes berkat DSM.
Saya pikir itu akhirnya semua golf.
Ini memindai setiap karakter dalam input dan mengurutkannya berdasarkan huruf besar atau tidak. Kemudian melakukan beberapa matematika mewah yang menyalahgunakan konversi bools ke ints implisit Python.
sumber
JavaScript (ES6),
124118 byteDemo langsung
(Diperluas sedikit agar mudah dibaca.)
Disimpan 6 byte berkat pengguna81655 .
sumber
Par , 49 byte
Satu byte digunakan per karakter. Lihat di sini .
Penjelasan
Output dalam bentuk
9 6
.sumber
CJam,
928381 byteIni berakhir lebih lama daripada yang saya pikir akan ...
Coba di sini.
Penjelasan (Berani saya jelaskan ini?: O):
sumber