在囚徒困境练习的一轮中,两名选手各自决定在该轮中是合作还是背叛。一回合的得分是:
- 玩家A和玩家B都合作:双方都得1分
- 玩家A和玩家B都缺憾:双方都得2分
- 玩家A配合而玩家B缺陷:与玩家A配合时3分,而与玩家B背离时0分
但是,您不必担心策略:您的程序仅是在计算游戏得分。(如果您已经熟悉了囚徒的困境,那么我在这里的“观点”相当于“入狱年限”。)
您的挑战是要获得代表球员在多个回合中的选择的输入并计算他们各自的总得分。一个球员在小写的提交选择,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,因为大写玩家提交的动作比小写玩家提交的动作更多。这是可以接受的,并且出于评分目的而被完全忽略。
要求如下:
您必须编写
/[cdCD]+/通过某种输入机制(STDIN,函数自变量,从文件读取等)接受正则表达式形式的字符串的程序或函数。(您的程序可以选择接受带有尾随换行符的输入。)您的程序或函数必须以字符串形式输出或返回玩家的分数。输出格式必须以小写玩家的分数开始,然后是大写玩家的分数,并由您选择的任何非空,非数字分隔符分隔。(尾随换行符是可选的。)
如果一个玩家的动作多于另一个,则多余的动作将被忽略。
如果输入中的所有移动都完全来自一个玩家(也就是说,根本没有进行过任何回合),则每个玩家的得分为
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]可以输出?
