fix: IdentifyFans filter排除无fallback番型—防止跨变体越权
核心变更: - filter从'well-known全放行'改为'只放行_fanConfig或有fallback值的' - 排除: 断幺九/无字/缺一门/将/平胡/平和(无hardcoded fallback) - 这些被排除时→allZeroValue→鸡胡兜底→保证非零分 效果: 南昌不再显示'断幺九+无字+平胡'等不存在于南昌规则的番型 测试: _fanConfig补全16个番型, 58 tests pass
This commit is contained in:
@ -90,7 +90,25 @@ public class DeckTests
|
||||
|
||||
public class MeldsSolverTests
|
||||
{
|
||||
private readonly MeldsSolver _solver = new(new Dictionary<string, FanConfig>());
|
||||
private readonly MeldsSolver _solver = new(new Dictionary<string, FanConfig>
|
||||
{
|
||||
["清一色"] = new() { BaseFan = 24 },
|
||||
["混一色"] = new() { BaseFan = 6 },
|
||||
["字一色"] = new() { BaseFan = 64 },
|
||||
["对对胡"] = new() { BaseFan = 2 },
|
||||
["碰碰和"] = new() { BaseFan = 6 },
|
||||
["暗七对"] = new() { BaseFan = 8 },
|
||||
["带幺九"] = new() { BaseFan = 2 },
|
||||
["缺一门"] = new() { BaseFan = 0 },
|
||||
["平胡"] = new() { BaseFan = 0 },
|
||||
["断幺九"] = new() { BaseFan = 2 },
|
||||
["无字"] = new() { BaseFan = 0 },
|
||||
["全大"] = new() { BaseFan = 12 },
|
||||
["全中"] = new() { BaseFan = 12 },
|
||||
["全小"] = new() { BaseFan = 12 },
|
||||
["全双"] = new() { BaseFan = 24 },
|
||||
["鸡胡"] = new() { BaseFan = 1 },
|
||||
});
|
||||
|
||||
// === 标准胡牌 ===
|
||||
[Fact]
|
||||
|
||||
@ -808,15 +808,16 @@ public class MeldsSolver
|
||||
if (fans.Count == 0 || allZeroValue)
|
||||
fans.Add("鸡胡");
|
||||
|
||||
// Filter: only keep fans that exist in DSL config or are well-known
|
||||
// Filter: keep fans in _fanConfig OR event fans OR well-known structural fans
|
||||
// Exclude zero-value markers (无字/缺一门/将) and no-fallback fans (断幺九/平胡/平和)
|
||||
// → these trigger allZeroValue→鸡胡 to ensure non-zero scoring
|
||||
return fans.Where(f => _fanConfig.ContainsKey(f) ||
|
||||
f is "清一色" or "混一色" or "对对胡" or "碰碰和" or "暗七对" or "七对"
|
||||
or "带幺九" or "十三幺" or "字一色" or "断幺九" or "无字" or "将"
|
||||
or "缺一门" or "平胡" or "全大" or "全中" or "全小" or "全双"
|
||||
or "将一色" or "大四喜" or "大三元" or "小四喜" or "小三元" or "三风" or "双箭刻"
|
||||
f is "杠上开花" or "海底捞月" or "抢杠胡" or "天胡" or "地胡" or "癞子胡"
|
||||
or "清一色" or "混一色" or "对对胡" or "碰碰和" or "暗七对" or "七对" or "带幺九" or "十三幺" or "鸡胡" or "字一色"
|
||||
or "全大" or "全中" or "全小" or "全双" or "大于五" or "小于五"
|
||||
or "将一色" or "大四喜" or "大三元" or "小四喜" or "小三元"
|
||||
or "一色四同顺" or "一色三同顺" or "一般高" or "五门齐" or "全求人" or "门前清"
|
||||
or "鸡胡" or "癞子胡" or "平和"
|
||||
or "圈风" or "门风" or "单钓将" or "四归一" or "杠上开花" or "海底捞月" or "抢杠胡" or "天胡" or "地胡").ToList();
|
||||
or "三风" or "双箭刻" or "圈风" or "门风" or "单钓将" or "四归一" or "连七对" or "全不靠" or "一色双龙会").ToList();
|
||||
}
|
||||
|
||||
// === 番型互斥应用 ===
|
||||
|
||||
Reference in New Issue
Block a user