找到战争游戏的结果
当我上小学时,有一场“石头剪刀布”式的游戏,我们在集会期间,等我们的老师,在课间休息时会玩。我们称之为“战争”。然而,经过一些搜索,事实证明这是“ Shotgun Game”(根据WikiHow)的简单得多的变体。由于规则略有不同,因此我将其称为“战争”:
2个人坐在彼此对面。游戏的目的是“杀死”另一位玩家。每回合,您可以玩以下3个动作之一:
重新装填:您有一杆枪可以一次射击。必须先重新加载它,然后才能每次射击。在已经拥有弹药的情况下重新加载是合法的,但不会执行任何操作。用两只手轻敲您的太阳穴即可象征重新装填。每个玩家从0弹药开始。
警卫:唯一安全的举动。如果您在守卫时被枪杀,则不会死。双臂交叉在胸前象征着警卫。
火:开枪。要成功射击,您必须自上次射击以来已重新加载。如果您的对手正在加注,您将获胜。如果他们也开火,而且你们俩都有弹药,那就平局了。如果他们在守卫,您就浪费了弹药。虽然没有弹药射击是合法的举动,但它却无能为力,使您像重新装弹一样容易受伤。指向其他玩家象征着射击。
玩法与RPS相似,在于每个玩家同时放弃选择(我们在回合之间两次敲击双腿以保持节奏,但这对挑战并不重要)。
挑战:
您的任务是找到战争游戏的结局。它可以是功能或完整程序。
输入值
每个玩家选择的回合选项将由一个字符/字符串表示:
r:重新加载
g:守卫
f:着火
输入将是成对列表,带分隔符/不带分隔符的字符串或沿这些行的其他任何内容。
Python中的示例输入可以为[("r", "g"), ("f", "r")]
,这意味着在第一回合中第一位玩家重新装弹,第二位玩家守卫。在第二个回合中,第一个玩家射击,而第二个玩家重新加载。玩家一赢得这场比赛。同样的输入可以选择性地为代表"r g f r"
,"rgfr"
,"rg fr"
"rg-fr"
...
您可以假设以下内容:
输入内容将与您选择的格式匹配,并且仅包含有效字符。
有人会在100转内死亡。
但是,您不能假设某人死亡时转弯结束。
输出量
一个值,指示谁(或谁先赢*
)。您可以选择每种方案的输出内容,但必须考虑以下因素:
玩家1获胜
玩家2获胜
他们互相残杀(平局)
每个结果必须具有地区值,并且对于每种情况都必须始终相同。
例如:您可以1
在玩家1获胜2
时,玩家2获胜时以及0
平局时输出。然后,您必须在玩家1获胜时,玩家2获胜时以及平局时始终输出。1
2
0
它可以返回或打印到标准输出。尾随空格很好。
显然,导致平局的唯一情况是两名球员都开火,并且双方都有弹药。
*
由于在此挑战中,某人死亡后回合可能会继续,因此最终可能会有1个以上的玩家获胜。您需要根据输入查找谁先赢。
测试用例(假设1
P1获胜,2
P2获胜以及0
平局):
"rg fr" => 1 (P1 shot P2 while they were reloading)
"rg ff" => 1 (They both shot, but only P1 had ammo)
"rr ff" => 0 (Both had ammo and shot each other)
"rr ff rr fg" => 0 (Both had ammo and shot each other. Everything after the first win is ignored)
"rr fg rf" => 2 (P2 shot P1 while they were reloading)
"rf gg rr fg rr fr" => 1
(P2 tried to shoot but didn't have any ammo, then they both guarded, then they both reloaded, then P2 blocked a shot, then they both reloaded again [but P2 still only has 1 ammo!], then P1 shoots P2 while they're reloading.
"rr gf fr rf gg rg ff" => 1
^ Player 1 wins here. The rest to the right has no effect on the output
这是代码高尔夫,所以最少的字节数获胜!
注意,如测试用例所示,您必须处理“笨拙”的动作。对于没有弹药的玩家尝试射击或连续重新装满2回合(并且仅累积一个弹药),这是完全有效的。
{"rff","rgf"}
吗?