首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >桥牌打分

桥牌打分
EN

Code Golf用户
提问于 2016-02-13 03:30:32
回答 3查看 413关注 0票数 12

使合同桥非常有趣的事情之一是它非常复杂的“人工”元游戏。这种手的得分系统只是其中的一小部分。

桥牌是一种纸牌游戏。每个玩家得到13张牌的手,游戏从出价开始。竞标决定了游戏的其余部分,因此也是关键的部分。为了确保你和你的合作伙伴不出价过高(或过低),这个人工评分系统是为了告诉你你的手有多好。

评分

这是一只手的样本:

代码语言:javascript
运行
复制
S:KQT5
H:J72
D:965
C:AK8

S,H,D,C代表西服(黑桃,红桃,钻石和球棒),其余的是那些套装中的牌。所以这只手有黑桃皇后(Q),黑桃王(K),黑桃十(T),黑桃五,心杰克,心七,等等。

评分系统的工作方式如下:

  • 每个王牌(A)得4分,国王(K) 3分,女王(Q) 2分,杰克(J) 1分。其他牌不分。
  • 每一张牌后的第四套给你1分。所以如果你有六颗心,你就能得到2分。
  • 一套只有2张牌的套装给你1分(这是双打)。一套你只有一张卡给你2分(这是一个单身)。如果你没有牌在某一套,你得到3分(这是一个空)。(通常情况下,只有在你和你的伴侣商定了一套西装后,你才会把这些计算在内,但为了让挑战变得更有趣,我会把它们包括在内。)

因此,上面的手有13点。

挑战

给定上述格式的桥牌手,计算出手有多少个点。西服将永远列在黑桃,红心,钻石和俱乐部,和牌将始终按顺序A,K,Q,J,T,9-2。

样本输入输出

代码语言:javascript
运行
复制
S:KQT5
H:J72
D:965
C:AK8
       \-> 13

S:AKQT6
H:54
D:J83
C:732
       \-> 12

S:
H:KQT8754
D:A86
C:432
       \-> 15

S:9876
H:843
D:652
C:432
       \-> 0

S:AKQT5
H:AQJ6
D:Q3
C:AK
       \-> 28

这是密码-高尔夫,所以以字节为单位的最短代码将获胜。

EN

回答 3

Code Golf用户

发布于 2018-03-03 10:16:08

Dyalog经典,24字节

代码语言:javascript
运行
复制
+/(⌊∘|5.5-≢¨),5|'JQKA'⍳∊

在网上试试!

使用⎕io=1

票数 1
EN

Code Golf用户

发布于 2018-03-05 15:32:02

斯塔克斯,18 字节数

代码语言:javascript
运行
复制
½Γ}♣▓="pì∩û╨▐M↨}╚-

到目前为止,最短的答案是打败了果冻(尽管我希望很快会被打败.)

在线运行和调试!

解释

使用解压版本来解释。

代码语言:javascript
运行
复制
LZF{"JQKA"I^+i5-:++F5+
L                         Collect input in a list (if this is not needed, we can yet save another byte)
 Z                        Put a zero under the top of the stack, used as the accumulator
  F                       Loop for every suit
   {               F      Calculate the "score" for the string describing the suit
    "JQKA"I^              Find the 1-based index of current character in "JQKA", 0 for not found
            +             Add to the accumulator
             i5-:+        Subtract 5 from the current 0-based index, and take the sign
                  +       Add to the accumulator
                    5+    Add 5 extra points for each suit

这是通过翻译实现的。

  • 每一张牌后的第四套给你1分。所以如果你有六颗心,你就能得到2分。
  • 一套只有2张牌的套装给你1分(这是双打)。一套你只有一张卡给你2分(这是一个单身)。如果你没有牌在某一套,你得到3分(这是一个空)。

  • 每套衣服多得3分
  • 每一张牌之前的第四套套给你-1分,每张牌后第四张给你1分,第四张牌得分0。

这样就可以利用signum函数的性质。

通过这样做,我们可以避免显式处理卡数节省了几个字节。

票数 1
EN

Code Golf用户

发布于 2022-02-03 14:51:08

Python,123个字节

代码语言:javascript
运行
复制
k=input()
l=k.split("\n")
print(4*k.count("A")+3*k.count("K")+2*k.count("Q")+k.count("J")+sum([max(len(m)-6,0) for m in l])

对于这些目的,.count是一个很好的函数,我不使用[2:]作为长度之和,因为我只需减去2。

总的来说,这个答案只是简单的方式。

票数 0
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/71968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档