囚人のジレンマエクササイズのラウンドでは、2人のプレイヤーがそれぞれ、そのラウンドに協力するか、または敗走するかを決定します。ラウンドの得点は次のとおりです。
- プレーヤーAとプレーヤーBの両方が協力:両方に対して1ポイント
- プレーヤーAとプレーヤーBの両方の欠陥:両方とも2ポイント
- プレイヤAの協働とプレイヤB不良:3点プレイヤーAの協働および0点プレイヤーBを逃走するための
ただし、戦略について心配する必要はありません。プログラムは単にゲームのスコアを集計するだけです。(あなたがすでに囚人のジレンマに精通している場合、ここでの私の「ポイント」は「刑務所での年」に対応します。)
あなたの課題は、数ラウンドにわたるプレイヤーの選択を表す入力を取得し、それぞれの合計スコアを計算することです。一人のプレイヤーの提出小文字での選択肢、cおよびd(のための協力や欠陥)、およびその他の提出の選択肢大文字で、CとD。これらの選択肢は文字列としてプログラムに提供されます。
通常、囚人のジレンマに陥っているプレイヤーは、動きを同時に、繰り返し送信します。ただし、このチャレンジでは、プレーヤーは一度に複数のラウンドの選択肢を提出した可能性があります。プレーヤーの動きが順不同の場合、スコアリングプログラムはそれを記憶し、それを相手プレーヤーから次に利用可能な動きと照合します。
入力文字列のサンプルは次のとおりです。
cDCddDDCcCc
この入力に存在する一致を表示するには、小文字と大文字を別々に呼び出して、それらをペアにします。
cDCddDDCcCc
c dd c c => cddcc
DC DDC C => DCDDCC
これらはラウンドにペアリングされます:
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)
スコア9(小文字)から6(大文字)を生成するため、出力は9,6(または明確な区切り文字)になります。
さらに別の方法で表現するために、それぞれのペアが独自の行に引き出されています。
cDCddDDCcCc
cD
Cd
dD
D c
C c
C大文字のプレーヤーが小文字のプレーヤーよりも多くの動きを送信したため、一致しないものが1つあります。それは許容範囲であり、スコアリングの目的では完全に無視されます。
要件は次のとおりです。
/[cdCD]+/何らかの入力メカニズム(STDIN、関数引数、ファイルからの読み取りなど)を介して、正規表現形式の文字列を受け入れるプログラムまたは関数を作成する必要があります。(オプションで、プログラムは末尾の改行で入力を受け入れる場合があります。)プログラムまたは関数は、プレーヤーのスコアを文字列として出力または返す必要があります。出力形式は、小文字のプレーヤーのスコアで始まり、その後に大文字のプレーヤーのスコアが続き、選択した任意の空でない非数値の区切り文字で区切られている必要があります。(末尾の改行はオプションです。)
一方のプレイヤーが他方のプレイヤーよりも多くの動きを持っている場合、余分な動きは無視されます。
入力のすべての動きが1人のプレイヤーのみからのものである場合(つまり、ラウンドがまったくプレイされていない場合)、各プレイヤーのスコアは
0です。バイト単位の最小の提出が勝ちです。
テストケース
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)か、[0,0]出力のためにOK?
