我正在关注这个:Optimizing hand-evaluation algorithm for Poker-Monte-Carlo-Simulation
我的设置是类似的——一个无符号的 long 来代表棋盘和玩家的持股。所有卡片都是位标志,从 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(玩家的持牌)。
我提到的链接很好地解释了如何找到同花顺 / 四同花顺,并且它有效。但是,我似乎在试图识别其中的三个时碰了壁。我试过了:
hand & (hand >> 1) & (hand >> 2) & 0x1111111111111111 - 天真的情况,遵循链接中的示例;
hand & (hand >> 2) & 0x3333333333333333 -- 这似乎抓住了所有三种,但它错误地将对(例如上面的例子)分类为行程;
- 及其变体。
如何消除少于三个设置位的所有半字节?