您决定组织一次剪刀石头布冠军赛,以找出谁是最好的。您不想让运气来决定获胜者,所以每个人都必须在比赛前以书面形式给您提供战术。您还喜欢简单的事物,因此竞争对手的举动(显示石头,纸张或剪刀)必须仅基于前一轮(RvR,RvP,RvS,PvR,PvP,PvS,SvR,SvP或SvS)。在第一轮中,玩家必须显示一个固定的标志。
您决定编写一个程序(或函数)来模拟锦标赛。
比赛详情
- 至少有2位参赛者。
- 每个玩家都与其他人完全进行一场比赛。
- 一场比赛持续7回合。
- 在每个回合中,获胜者获得2分,失败者获得2分。如果出现平局,双方选手得分均为1分。
- 一名球员在一场比赛中的得分是他或她在比赛回合中得分的总和。
- 球员在锦标赛中的最终得分是他或她在所有比赛中的积分之和。
输入的详细信息:
- 您的程序或函数会收到
N
10个字符长的字符串,每个字符串都对应一个玩家策略。所有字符均为(小写)r
p
或s
表示在给定情况下玩家将显示石头纸或剪刀。 - 第一个字母代表第一个回合(在该运动员的每场比赛中)。第二个显示如果上一轮是摇滚对摇滚,会发生什么。接下来的是RvP,RvS,PvR,PvP,PvS,SvR,SvP和SvS,其中第一个字母是玩家的牌子,第二个字母是对手的牌子。例如,
rrpsrpsrps
意味着玩家从岩石开始,然后复制对手的最后一步。 - 您可以将字符串列表输入为列表/数组或您的语言的类似数据或一个字符串。在后一种情况下,必须使用某种分隔符。
输出的详细信息:
- 您的程序或函数应按照提供输入的顺序输出每个玩家的最终得分。
- 分数应以空格或换行符分隔。允许使用尾随空格或换行符。
例子:
输入:
['rrpsrpsrps', 'rpppsprrpr']
输出:(
5 9
转rvr rvp pvs svp pvr rvp pvs
)
输入:
['rrpsrpsrps', 'rpppsprrpr', 'ssssssssss']
输出:(
13 17 12
匹配项是5-9
(第一对第二),8-6
(第一对第三)和8-6
(第二对第三))
这是代码高尔夫球,因此最短的条目将获胜。
受到Numberphile的启发吗?;-)
—
Jakube 2015年
第二个例子正确吗?我认为第一个与第三
—
2015年
6-8
个相对较差,第二个与相对较弱6-8
。
@Jakube已更正示例输入。谢谢。
—
randomra