通过位操作确定扑克手牌强度

时间:2017-08-17 05:26:38

标签: bit-shift bitmask poker nibble

我正在关注此事:Optimizing hand-evaluation algorithm for Poker-Monte-Carlo-Simulation

我的设置类似 - 一个无符号长度代表董事会和玩家的控股。所有卡都是位标志,从1开始到2 ^ 51结束。

例如,2c为1,3c为16,4c为256,As为2 ^ 51。所以,手

1010 0000 1001 0000 0000 0100 0000 0001 0000 0000 0010

Qs Qd 7h 5c 2d(棋盘)+ Ts Tc(玩家持有)。

我提到的链接很好地解释了如何找到同花顺/四种,并且它有效。然而,我似乎碰到了一堵砖墙,试图找出三种。我试过了:

  • 手& (手>> 1)& (手>> 2)& 0x1111111111111111 - 根据链接示例的天真案例;

  • 手& (手>> 2)& 0x3333333333333333 - 这似乎捕获了所有三种类型,但它将对(例如上面的示例)错误分类为行程;

  • 及其变体。

如何以少于三个设定位消除所有半字节?

1 个答案:

答案 0 :(得分:1)

此问题与计算Hamming weight密切相关。那就是你对每个半字节的设置位数感兴趣。开始的步骤是:

Error:Execution failed for task ':app:compileDebugKotlin'.
> Compilation error. See log for more details

这导致w中每个半字节的设置位数。然后,您检查w的每个半字节是否包含3.如下所示:firebaseAuth = FirebaseAuth.getInstance()