二七王:is_continuous 的 8→6 相邻补花色校验

design §5.3 的「6 与 8 可组成拖拉机」是同花色内的相邻关系,但
is_8/is_6 只判 code % 100,不校验花色,导致
is_continuous(♥8=308, ♣6=206) 与 is_continuous(主8=1408, ♣6=206)
都返回 true。

影响面:get_chongguan 是唯一会拿整手牌(含各花色副牌)去扫描连对
链的调用点,连对链走到主 8 之后,手里任意花色的一对 6 都会被误判
为连续、多算 1 奖,并把链锚点带进副牌继续错误延伸(design §8.1
明确 A 到 5 这一段必须是选定花色的主牌)。其余调用点入参都是同花
色牌表或纯主牌表,不受影响。

改为要求牌编码相差 2(同花色的 8 与 6 恒差 2,跨花色差 100 的倍
数),并保留 is_8/is_6 守卫以免把「主A-主Q」这类差 2 组合放行。

test_arith 新增 5 项:同花色 8-6 连、三组跨花色 8-6 不连、差 2 但
非 8/6 的组合不连。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-12 04:17:32 +08:00
co-authored by Claude Opus 5
parent 20b5425a65
commit 5832b781c8
2 changed files with 12 additions and 2 deletions
+5 -2
View File
@@ -219,8 +219,11 @@ var cls_youle_erqiwang_arith = cls_youle_erqiwang_arith || {
if (is_fu2(bigcode) && is_zhuA(smallcode)){
return true;
}
//8、6
if (is_8(bigcode) && is_6(smallcode)){
//8、6(design §5.3:7 不与 6/8 相连,6 与 8 相连)
//必须是同一花色的 8 与 6:牌编码同花色相差 2(主花色 1408-1406=2、副牌 308-306=2),
//跨花色则相差 100 的倍数。只判 %100 会把「♥8 + ♣6」误判为连对,
//进而在 get_chongguan 扫描整手牌时让副牌的 6 对错误接续主 8、多算奖(design §8.1 连对链)
if (is_8(bigcode) && is_6(smallcode) && (bigcode - smallcode == 2)){
return true;
}
return false;
+7
View File
@@ -156,6 +156,13 @@ t.eq('相邻 主8-主6(6/8可连)', cont(id(1, 1, 8), id(1, 1, 6)), true);
t.eq('相邻 主6-主5', cont(id(1, 1, 6), z5), true);
t.eq('相邻 正7-主6 不连(7不入普通序)', cont(Z7, id(1, 1, 6)), false);
t.eq('相邻 主8-正7 不连', cont(id(1, 1, 8), Z7), false);
// 8/6 相邻必须同花色:跨花色的 8 与 6 不成连对(否则 get_chongguan 连对链会被副牌 6 对错误接续)
t.eq('相邻 副♥8-副♥6 同花色 连', cont(id(1, 3, 8), id(1, 3, 6)), true);
t.eq('相邻 副♥8-副♣6 跨花色 不连', cont(id(1, 3, 8), id(1, 2, 6)), false);
t.eq('相邻 主8-副♣6 跨花色 不连', cont(id(1, 1, 8), id(1, 2, 6)), false);
t.eq('相邻 副♠8-副♦6 跨花色 不连', cont(id(1, 4, 8), id(1, 1, 6)), false);
// 顺带确认非 8/6 的等差2组合仍不连(防守卫写宽)
t.eq('相邻 主A-主Q 不连(差2但非8/6)', cont(zA, id(1, 1, 12)), false);
// ============ §7 算子:每档小光/过庄分界 + 升3级(补强)============
t.eq('常规65 g39小光', judge(65, 39, false), '小光/4');