六爻排盘算法的工程化实现:从易学理论到代码
将传统六爻排盘的纳甲、六亲、六神、八宫等理论转化为可执行代码的完整过程。
一、前言
六爻排盘是中国传统易学中的核心占卜方法,涉及大量规则和查表逻辑。将这些规则工程化,需要把散落在古籍中的知识系统地转化为数据结构和算法。
本文记录了在开发「爻动万象」过程中,如何将六爻排盘的完整逻辑用 TypeScript 实现的经验。
二、数据结构设计
六爻排盘的基础是地支、天干、五行的映射关系。我们用数字索引代替中文字符串,提高运算效率:
// 地支索引:子=0, 丑=1, 寅=2, ..., 亥=11
export const EB = ['子','丑','寅','卯','辰','巳','午','未','申','酉','戌','亥']
// 地支对应五行
export const EB_EL: Record<number, string> = {
0:'水',1:'土',2:'木',3:'木',4:'土',5:'火',6:'火',7:'土',8:'金',9:'金',10:'土',11:'水'
}
// 五行生克关系
export const SHENG = {'金':'水','水':'木','木':'火','火':'土','土':'金'} // 生
export const KE = {'金':'木','木':'土','土':'水','水':'火','火':'金'} // 克
三画卦(经卦)用 3 位二进制表示,从下到上:
// 三画卦值 = bit0 + bit1*2 + bit2*4
// 乾=7(111), 兑=3(011), 离=5(101), 震=1(001)
// 巽=6(110), 坎=2(010), 艮=4(100), 坤=0(000)
三、纳甲系统
纳甲是将天干地支分配到六爻的核心步骤。每个八卦有固定的纳甲规则,分阳卦(乾震坎艮)和阴卦(坤巽离兑)两套:
// 纳甲地支(内卦)
export const NJ_IN: Record<number, number[]> = {
7:[0,2,4], // 乾:子寅辰
1:[0,2,4], // 震:子寅辰
2:[2,4,6], // 坎:寅辰午
4:[4,6,8], // 艮:辰午申
6:[1,11,9], // 巽:丑亥酉
5:[3,1,11], // 离:卯丑亥
0:[7,5,3], // 坤:未巳卯
3:[5,3,1] // 兑:巳卯丑
}
外卦(上卦)的纳甲规则不同,需要单独维护一张表。装卦时根据上下卦的三画卦值查表,拼接成完整的六爻地支序列。
四、八宫与世应
八宫系统是确定世爻和应爻的关键。每个宫有 8 卦,按「本宫纯卦 → 一世到五世 → 游魂 → 归魂」的顺序排列。我们用一个查找表实现:
export function initPalaces(): void {
const worldIdxs = [5, 0, 1, 2, 3, 4, 3, 2] // 世爻位置
;[7, 2, 4, 1, 6, 5, 0, 3].forEach(tv => {
// 遍历 8 个卦,逐爻变化
for (let step = 0; step < 8; step++) {
// 从初爻开始依次变,到五世后恢复四爻(游魂)
// 再恢复下三爻(归魂)
const key = lines.join(',')
PALACE_LOOKUP[key] = {
palace: tv, worldIdx: worldIdxs[step],
palaceName: TRI[tv].n, palaceEl: TRI[tv].el
}
}
})
}
应爻位置固定为世爻位置 + 3(对位关系),这是一个简洁而优雅的规则。
五、用神选取算法
用神选取是断卦的核心。当用神「两现」(卦中有两个相同六亲)时,需要按规则筛选唯一用神。我们的实现采用评分制:
const scored = allCandidates.map(idx => {
let sc = 0
if (!isBroken) sc += 4 // 未月破 +4
if (!isHuiKe) sc += 3 // 未化回头克 +3
if (!isVoid) sc += 2 // 未旬空 +2
if (isMoving) sc += 1 // 动爻 +1
if (str === '旺') sc += 2 // 旺相 +2
return { idx, sc }
})
scored.sort((a, b) => b.sc - a.sc)
// 取评分最高者为用神
铁律:一卦只用一个用神,从头到尾不变。选好后,其他同六亲的爻仅作参考。
六、总结
将六爻排盘工程化的核心挑战在于:规则散落在不同古籍中,需要系统梳理;大量查表操作需要高效的数据结构;各种特殊情况(旬空、月破、伏神、进退神)需要完整的条件分支。
最终的实现约 830 行核心代码,覆盖了纳甲、六亲、六神、八宫、旬空、月破、用神选取、伏神查找、世应关系、四处生克、特殊状态审查、速断参考和综合判断共 7 大分析模块。