用 pokerstove 圣化手不能按预期工作
canonizing hands with pokerstove does not work as expected
在使用 pokerstove 库 (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;
}
从 hand1 的角度来看,其他两手牌是相同的(它们都包含 4c 和 off-suit 2)。尽管如此,在关于 hand1 对它们进行经典化之后,它们都保持不变。这不是我所期望的。
实际上,我会认为(并且打算)hand2 保持原样 - 因为 'clubs' 不能像它们出现在 hand1 中那样排列,而 'diamonds' 是下一个可用的花色-suit 2. 但我预计 hand3 会变得与 hand2 相同(通过将 'hearts' 切换为 'diamonds')。
你们中有人知道为什么这没有按预期工作吗?
是否有另一种方式来捕捉第 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);
}
在使用 pokerstove 库 (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;
}
从 hand1 的角度来看,其他两手牌是相同的(它们都包含 4c 和 off-suit 2)。尽管如此,在关于 hand1 对它们进行经典化之后,它们都保持不变。这不是我所期望的。
实际上,我会认为(并且打算)hand2 保持原样 - 因为 'clubs' 不能像它们出现在 hand1 中那样排列,而 'diamonds' 是下一个可用的花色-suit 2. 但我预计 hand3 会变得与 hand2 相同(通过将 'hearts' 切换为 'diamonds')。
你们中有人知道为什么这没有按预期工作吗?
是否有另一种方式来捕捉第 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);
}