介绍
Skat是一款传统的德式纸牌游戏,可容纳3位玩家。副牌由32张牌组成:王牌,王牌,王后,杰克,10套,9套,8套,7套所有4套服(俱乐部,黑桃,心,钻石)。
在每个回合中,有一个玩家独奏,而另外两个则与他对抗。在回合开始时,每位玩家被发10张牌,剩下的2张牌称为skat,并面朝下放在中间。独奏者由投标阶段确定。这是您在此挑战中必须处理的游戏部分,有关此内容的更多信息,请参见下文。
赢得竞标阶段的玩家将成为独占玩家。他拿起小号,然后放下两张牌(可能是相同的,另一支球队不知道),拿下王牌,然后回合开始。
一轮包括十个技巧。赢得花样的玩家将领导下一张,直到玩完所有纸牌为止。我不会在这里解释这些规则,但是您应该知道拥有很多王牌是很好的。如果您想了解规则,请查看我在本文开头链接的Wikipedia文章,但对于本挑战而言并不需要。
挑战
您想教您的两个儿子如何打skat。这些规则并不难,因此很快就会被采纳。唯一给他们带来困难的是出价,特别是计算他们手牌的游戏价值。因此,您决定编写一个小程序,输出给定当前手牌可以出价的最大游戏值。
计算游戏价值
每只手都有一定的游戏价值。它由您所拥有的连续千斤顶的数量和您要选为王牌的西装决定。让我们从第一个因素开始吧!
杰克因素
千斤顶总是王牌,他们击败其他所有王牌。四个千斤顶之间的强度顺序为:
- 俱乐部杰克(最高)
- 黑桃杰克
- 杰克之心
- 钻石杰克(最低)
在进一步的说明中,我将使用此处分配给他们的编号来引用它们。
您还记得从您手中的Jacks获得的某种因素是游戏价值的一部分吗?大!这是您的获取方式:
该千斤顶系数是依次排列的最高千斤顶数(请参阅上面的顺序),再加上1。因此,如果您拥有全部4个千斤顶,则为4 +1 =5。如果只有前2个千斤顶,则为2 +1 = 3。
另外,为了使事情更复杂一点,杰克因数也可以是您所缺少的按顺序排列的最高杰克数加1。因此,如果您缺少第一个杰克,则为1 +1 = 2。缺少他的前3个,即3 + 1 =4。下面是使用上面的编号的示例:
[1, 4] -> 1 + 1 = 2
[1, 2, 4] -> 2 + 1 = 3
[2, 3, 4] -> 1 + 1 = 2
[1, 2, 3, 4] -> 4 + 1 = 5
[] -> 4 + 1 = 5
那是第一个因素。这是您获得第二个的方法:
特朗普诉讼因素
这一个简单得多。第二个因素由独奏者使用以下映射选择的王牌西装确定:
Clubs -> 12
Spades -> 11
Hearts -> 10
Diamonds -> 9
那很容易,不是吗?
游戏价值
游戏价值是两个因素的乘积。您觉得很容易吗?错误!千斤顶因数是固定的,而拟合因数不是固定的。您最终选择的西服套装取决于王牌数量和手中非王牌的价值。解释好手看起来太复杂了,因此您将使用以下算法:
哪个胜过我选择算法
您不必参加竞标。如果您认为自己的手牌太糟糕而不能独奏,则可以通过。您的手必须符合以下条件才能玩:
至少有6张王牌(您选择的王牌套装的卡+插孔数)。如果这可能适用于不止一套衣服,请选择那套会带来更多王牌的衣服。如果仍然有领带,则选择上面给出的最高评分的西装。
在非麻将卡中,至少有1个A。
如果您的手不符合这两个条件,您将通过。如果是这样,您将输出计算出的游戏值和所选的王牌套装。
简短说明:当然,这是一个非常简化的算法。判断手牌方面有太多的策略和经验,超出了我们在这种挑战中所无法涵盖的范围。
输入值
每张卡都有唯一的标识符。第一部分是西装(C lubs,S pades,H earts,D iamonds),第二部分是此映射给出的值:
Ace -> A
King -> K
Queen -> Q
Jack -> J
10 -> 0
9 -> 9
8 -> 8
7 -> 7
这两部分组成一张卡。价值首先出现,然后是诉讼。您可以根据需要采取任何格式的卡。
输出量
如果这只手是可玩的,则输出游戏值和所挑选的王牌西服(顺序无关紧要)。如果不是,则输出“ pass”。
规则
- 如前所述,您可以采用最方便的格式输入。示例参见下面的测试案例。
- 输入可以通过命令行参数,用户输入或函数参数提供。
- 输出可以作为返回值提供,也可以仅打印在屏幕上。
- 不得以任何方式订购输入中的卡。您的程序必须能够处理任何随机的卡订单。
- 最低字节数获胜!
测试用例
测试用例中的输入将是2个字符的字符串列表。
1. ["JC", "JS", "JD", "AC", "KC", "9C", "AS", "7H", "QD", "8D"] -> 36 Clubs
2. ["JD", "AS", "0S", "KS", "QS", "9S", "8S", "AD", "8C", "9C"] -> 44 Spades
3. ["JH", "JD", "0S", "KS", "9C", "8C", "QH", "KH", "AD", "9D"] -> pass
4. ["JD", "AS", "KS", "QS", "0S", "9S", "8D", "7D", "0C", "QH"] -> pass
说明:
- 连续两个杰克与俱乐部作为王牌。因此游戏值为3 x 12 = 36
- 连续三个杰克缺少黑桃作为王牌。所以游戏值为4 x 11 = 44
- 最多只能有4张王牌,这样您就可以通过。
- 六张带黑桃王牌但无王牌的王牌,因此您将通过。
如果某些规则不清楚,请继续进行评论。我从小就玩这个游戏,所以很难判断我是否足够详细地描述了所有内容。
现在... 快乐编码!
编辑:正如我在评论中向我指出的(感谢isaacg),有一个规则可以将4个千斤顶放入“千斤顶系数”后计入以下最高得分,因此可以升至11。为了不混淆人们,我最初提出的规则将保持原样。因此,最大因数保持在5。