Mahkumun ikilem egzersizinin bir turunda , iki oyuncu her biri o tur için işbirliği yapıp yapmamaya veya kaçmaya karar verir . Bir turun puanlaması:
- Oyuncu A ve Oyuncu B'nin ikisi birlikte çalışır: Her ikisi için de 1 puan
- Oyuncu A ve Oyuncu B'nin ikisi de kusurlu: ikisi için de 2 puan
- Oyuncu bir işbirliği yapar ve oyuncu B kusurları: 3 puan Oyuncu birlikte çalışan ve 0 puan Oyuncu B bozan için
Yine de strateji hakkında endişelenmenize gerek yok: programınız sadece bir oyunun skorunu tablo haline getirecek. (Mahkumun ikilemine aşina iseniz, buradaki "puanlarım", yıllarca hapishaneye karşılık gelir.)
Zorluk, oyuncuların birkaç turda seçimlerini temsil eden girdileri almak ve toplam puanlarını hesaplamaktır. Bir oyuncu seçimleri küçük harfle c
ve d
( işbirliği ve kusur için ), diğeri ise seçimleri büyük harfle C
ve D
. Bu seçenekler programınıza dize olarak sağlanır.
Normalde, mahkum ikilemindeki oyuncular hareketlerini eşzamanlı ve tekrarlı olarak sunarlar. Ancak bu mücadelede oyuncular aynı anda birkaç tur için seçimlerini sunmuş olabilirler. Bir oyuncunun hamlesi sıra dışı ise, puanlama programı onu hatırlar ve rakip oyuncudan bir sonraki uygun hamle ile eşleştirir.
Örnek bir giriş dizesi:
cDCddDDCcCc
Bu girişte bulunan eşleşmeleri göstermek için, küçük ve büyük harfleri ayrı ayrı çağırıp eşleştireceğim:
cDCddDDCcCc
c dd c c => cddcc
DC DDC C => DCDDCC
Bunlar turlarla eşleştirilecek:
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)
Hangi puan 9
(küçük harf) 6
(büyük harf) üretir , bu nedenle çıktı 9,6
(veya herhangi bir kesin sınırlayıcı) olmalıdır.
Bunu başka bir şekilde ifade etmek için, her bir eşleşme kendi satırında çekildi:
cDCddDDCcCc
cD
Cd
dD
D c
C c
Eşleşmeyen bir tane var C
, çünkü büyük harfli oyuncu küçük harfli oyuncudan daha fazla hamle gönderdi. Bu kabul edilebilir ve puanlama amacıyla tamamen göz ardı edilir.
İşte gereksinimler:
/[cdCD]+/
Bazı girdi mekanizmaları (STDIN, işlev bağımsız değişkeni, dosyadan okuma vb.) Aracılığıyla normal ifade formunun bir dizesini kabul eden bir program veya işlev yazmalısınız . (Programınız isteğe bağlı olarak sondaki yeni satırla girişi kabul edebilir.)Programınız veya işleviniz, oyuncuların puanlarını bir dize olarak çıkarmalı veya döndürmelidir. Çıktı biçimi, küçük harfli oyuncunun puanı ve ardından büyük harfli oyuncunun puanı ile başlamalı ve seçtiğiniz boş olmayan, sayısal olmayan sınırlayıcılarla ayrılmalıdır. (Sonunda bir satırsonu isteğe bağlıdır.)
Bir oyuncunun diğerinden daha fazla hamlesi varsa, fazla hamleler göz ardı edilir.
Girişteki tüm hamleler sadece bir oyuncudan geliyorsa (yani, hiç tur oynanmadı), o zaman her oyuncunun puanı olur
0
.Bayt cinsinden en küçük gönderim kazanır.
Test senaryoları
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)
yoksa [0,0]
çıkış için tamam mı?