用pokerstove封圣双手并没有如预期的那样奏效
canonizing hands with pokerstove does not work as expected
使用pokermove库时(https://github.com/andrewprock/pokerstove)我遇到了以下关于卡片套装封圣的问题。
下面是一个演示我的情况的简短代码片段:
#include <iostream>
#include <pokerstove/peval/CardSet.h>
using namespace std;
using namespace pokerstove;
int main() {
CardSet hand1("2c3c"), hand2("2d4c"), hand3("2h4c");
cout << hand1.str() << endl;
hand2 = hand2.canonize(hand1);
hand3 = hand3.canonize(hand1);
cout << hand2.str() << endl;
cout << hand3.str() << endl;
return 0;
}
从手1的角度来看,另外两只手是相同的(它们都包含4c和一件西装2)。尽管如此,在对他们的手1进行封圣之后,他们都保持不变。这不是我所期望的。
事实上,我本以为(并打算)第二手保持原样,因为"俱乐部"不能像第二手出现的那样被替换,而"钻石"是第二手的下一套可用套装。但我原以为hand3会和hand2完全一样(用"钻石"替换"心形")。
你们中有人知道为什么这没有按预期工作吗?
有没有其他方法可以捕捉手2和手3相同的事实(从手1的角度来看)?
任何帮助都将不胜感激!
对于那些可能感兴趣的人,我只是自己找到了问题的解决方案。以下操作可以实现:
hand1.canonize();
if (!hand2.suitMask(Suit::Hearts())) {
hand2 = hand2.rotateSuits(0, 1, 3, 2);
}
if (!hand2.suitMask(Suit::Diamonds()) && !hand1.suitMask(Suit::Diamonds())) {
hand2 = hand2.rotateSuits(0, 3, 1, 2);
}