思考
向听数比较通俗易懂的解释是还差几张牌听牌,用程序能理解的话就是:1
2将手牌的n张牌替换成任意一张牌,能够满足听牌的n的最小值
此时,手牌就是n向听
向听数可以由下面的公式快速算出:1
向听数=8-2x(顺子数量+刻子数量)-对子数量-搭子数量
暂不考虑七对子与国士无双
所以只需要算出顺子、刻子、对子以及搭子的数量即可
但是要注意的是,很多牌形是有多种拆分方式的,诸如下面的示例1
1234s
可以认为是123
的顺子加上孤张4
,也可以认为是1
的孤张加上234
的顺子,还可以认为是12
和34
两个搭子……
编码
我完善了上一章中的代码,将对子、刻子、顺子等概念抽象成类,每种拆分情况都由这四种组成,部分示例代码如下
1 | package io.loli.mj.util.analyze; |
1 | package io.loli.mj.util.analyze; |
示例输出
1 |
|
我们现在已经能够知道一副手牌的向听数了,下一期将会讲牌效率相关的内容
相关代码会在整理后放到github上