- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我有一个算法来计算德州扑克中玩家的手牌是否是顺子。它工作正常,但我想知道是否有一种不涉及数组/字符串转换等的更简单的方法。
这是我所拥有的简化版本。假设玩家拿到一手由 52 个元素组成的牌值数组:
var rawHand = [1,0,0,0,0,0,0,0,0,0,0,0,0, //clubs
0,0,0,0,0,0,0,0,0,0,0,0,0, //diamonds
0,1,1,0,1,0,0,0,0,0,0,0,0, //hearts
0,0,0,1,0,0,0,0,1,0,0,0,0];//spades
A 1 代表该值槽中的一张牌。上面的牌有 2 个梅花,没有方 block ,3 个红心,4 个红心,6 个红心,5 个黑桃和 10 个黑桃。现在我看着它找到一条直线。
var suits = []; //array to hold representations of each suit
for (var i=0; i<4; i++) {
var index = i*13;
// commenting this line as I removed the rest of its use to simplifyy example
//var hasAce = (rawHand[i+13]);
//get a "suited" slice of the rawHand, convert it to a string representation
//of a binary number, then parse the result as an integer and assign it to
//an element of the "suits" array
suits[i] = parseInt(rawHand.slice(index,index+13).join(""),2);
}
// OR the suits
var result = suits[0] | suits[1] | suits[2] | suits[3];
// Store the result in a string for later iteration to determine
// whether straight exists and return the top value of that straight
// if it exists; we will need to determine if there is an ace in the hand
// for purposes of reporting a "low ace" straight (i.e., a "wheel"),
// but that is left out in this example
var resultString = result.toString(2);
//Show the result for the purposes of this example
alert("Result: " + resultString);
这里的诀窍是对各种花色进行或运算,因此只有一个 2 对 A 表示。我认为必须有更简单的方法来做到这一点,我错了吗?
最佳答案
您的代码所做的几乎所有工作都是类型转换。如果您刚开始以位格式存储手牌(需要 > 32 位类型),您可以执行以下操作:
var mask = 2^13 - 1; // this will zero out all but the low 13 bits
var suits = (rawHand | rawHand>>13 | rawHand>>26 | rawHand>>39) & mask;
使用一行循环的等价物是:
var suits = [];
for(var i=0; i < 13; i++) {
suits[i] = rawHand[i] || rawHand[i+13] || rawHand[i+26] || rawHand[i+39];
}
这要短得多,也更容易理解。
与使用按位 OR 运算符节省的时间相比,与按位表示形式相互转换需要更多的代码和 CPU 时间。
关于javascript - 有没有比这更简单的方法来计算扑克中的顺子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4004856/
一副扑克牌是 52 张牌 13阶4花色 致力于高效的手部表示和评估 A K Q J T 9 8 7 6 5 4 3 2 scdh
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我遇到了一个真正令人困惑的错误,在过去的几个小时里我一直试图解决这个错误,但没有成功。我正在研究扑克实现。最初,我通过迭代循环生成卡片。 const suits = ['Heart', 'Spade'
我是一名优秀的程序员,十分优秀!