十亿次实验,用概率解读周易大衍筮法的奥秘

还记得封神电影里的文王占卜吗?

也就是著名的大衍筮法。

《易传》曰:大衍之数五十,其用四十有九。分而为二以象两,挂一以象三, 揲之以四以象四时,归奇于扐以象闰,五岁再闰,故再扐而后挂……

具体的操作步骤:

(1) 取蓍草签50支。
(2) 抽取1支,横放置其上,以象征太极。
(3) 将余下49支一分为二,左右各一组(象征太极分两仪,取天地之象,左天右地)
(4) 从右组(亦有从左取)中抽取1支,夹于左手小指与无名指之间。(取三才之象)
(5) 将右组余下之数,每4支为一小组,最后剩余之数夹于左手无名指与中指之间(如无剩余,即取最后四支)。
(6) 左组如是重复,剩余之数夹于左手中指与食指之间。
(7) 将三次取签置于左上。
(8) 余下蓍签混合,如之重复。共三次。
(9) 于第三次,查看左右剩余组数(每4支为一组),所得组数,是为第一爻之数。
(10) 将所有蓍签重新混合,如之重复六次,得出全部六爻的代表数字。注:6、8为阴爻,7、9为阳爻,以此画出卦象,得出“本卦”。 9、6为老阳老阴之数,7、8为少阳少阴之数,老变少不变,爻变之后得出新的卦象,是为“之卦”。

然后再按照朱熹的解卦方法:

1、六爻皆不变者,则占本卦卦辞;
2、一爻变者,则以本卦变爻之辞占;
3、二爻变者,则以本卦二变爻之辞占,而以上爻之辞为主;
4、三爻变者,则占本卦及之卦的卦辞,而以本卦为主;
5、四爻变者,则以之卦中二不变之爻辞占,以下爻之辞为主;
6、五爻变者,则以之卦中不变爻的爻辞占;
7、六爻皆变者,则以乾坤二用之辞占,并参考其之卦卦辞。

好了,接下来我们来用程序探寻其中的奥秘。

关于大衍筮法的实现,根据上文中的规则,我在其中加入了一个设定,就是左右手分蓍草的时候,设定了一个常规值边界,避免出现两端特别不平均的情况。因为按照常理来说一分为二大家都会趋近于平衡,至少不低于总数的20%,很少某一边就留下一两根另外一边很多,不然这就是完全可控的结果了,是为心不诚。

不过从实验结果来看,即使这个设定去掉,变成完全随机也不影响结果。因为从正态分布来看,两极化的概率本来就很低。

完整代码在结尾,我们先来看十亿次运行的相关数据:

首先是6789即老阳少阳老阴少阴的分布:

占卜单爻统计:
触发剩余6堆的次数:87502119,占比1.4584%
触发剩余7堆的次数:862489000,占比14.3748%
触发剩余8堆的次数:2462507168,占比41.0418%
触发剩余9堆的次数:2587501713,占比43.1250%

从这个概率上来看就有点超乎想象,8和9的数明显很多,而6却仅有1.46%,甚至都不符合正态分布,这是怎么回事呢?

我们回到大衍筮法的三次求余结果来看,第一次总数是49,取1根在左手小指与无名指之间。即剩48,分成2份要么左右两边都被4整除,那么左右两边各取4根,加上1根即为9根,若不能被4整除,则左右余数和为4根,加上1根为5根,即第一次的结果减少的数量必然是5或者9。这样第二次的数量就是【40,44】

第二次同理,取1根变成39或43,若一边能被4整除,则为4+3,否则为3,再加上1根,即第二次的结果减少的数量必然是4或者8

如此下来区间分布就是【32,36,40】

以此类推,第三次减少的数量必然也是4或者8,则最后区间为【24,28,32,36】

这也就是最后的6,7,8,9。

但这里有一个问题,就是整除的概率肯定是低于不能整除的,所以减少量蓍草的概率很大,那么最终结果一定偏向8,9。

8为少阴不变,9为老阳会变。那么如果按照这样的方式来看的话,其之卦阴爻的概率会非常大。

我们再来看变爻数量的统计:

变爻数量统计:
触发变爻0个的次数:28951575,占比2.8952%
触发变爻1个的次数:139810204,占比13.9810%
触发变爻2个的次数:281207674,占比28.1208%
触发变爻3个的次数:301619211,占比30.1619%
触发变爻4个的次数:181988467,占比18.1988%
触发变爻5个的次数:58570435,占比5.8570%
触发变爻6个的次数:7852434,占比0.7852%

结合上面单个爻来看,得78的概率为55%,得69的为45%,则在原有正态分布上向少变的方向偏移。3爻变为主,根据朱熹的方法来看,三爻变者,则占本卦及之卦的卦辞,而以本卦为主,那么主要还是看本卦。如此来看,一次占卜取本卦的概率为75%左右。

重点来了,我们来看高频结果分布:

最高频率出现的六爻组合:
999999,对应的是坤为地卦卦辞,命中次数:6432632,占比0.6433%
999989,对应的是坤为地卦六五,命中次数:6126931,占比0.6127%
899999,对应的是坤为地卦初六,命中次数:6124713,占比0.6125%
999899,对应的是坤为地卦六四,命中次数:6122186,占比0.6122%
989999,对应的是坤为地卦六二,命中次数:6121905,占比0.6122%
999998,对应的是坤为地卦上六,命中次数:6120829,占比0.6121%
998999,对应的是坤为地卦六三,命中次数:6119796,占比0.6120%
989989,对应的是坤为地卦六二,命中次数:5831454,占比0.5831%
998899,对应的是坤为地卦六三,命中次数:5830619,占比0.5831%
899989,对应的是坤为地卦初六,命中次数:5830615,占比0.5831%
989899,对应的是坤为地卦六二,命中次数:5829030,占比0.5829%
999898,对应的是坤为地卦六四,命中次数:5828027,占比0.5828%
898999,对应的是坤为地卦初六,命中次数:5827550,占比0.5828%
899998,对应的是坤为地卦初六,命中次数:5825842,占比0.5826%
999889,对应的是坤为地卦六四,命中次数:5825424,占比0.5825%
989998,对应的是坤为地卦六二,命中次数:5825309,占比0.5825%
998989,对应的是坤为地卦六三,命中次数:5825153,占比0.5825%
899899,对应的是坤为地卦初六,命中次数:5824469,占比0.5824%
988999,对应的是坤为地卦六二,命中次数:5824108,占比0.5824%
999988,对应的是坤为地卦六五,命中次数:5823373,占比0.5823%
998998,对应的是坤为地卦六三,命中次数:5822505,占比0.5823%
889999,对应的是坤为地卦初六,命中次数:5821532,占比0.5822%
998889,对应的是山泽损卦卦辞,命中次数:5548309,占比0.5548%
898899,对应的是风水涣卦卦辞,命中次数:5547928,占比0.5548%
889989,对应的是火山旅卦卦辞,命中次数:5546095,占比0.5546%
889899,对应的是风山渐卦卦辞,命中次数:5546081,占比0.5546%
989898,对应的是水火既济卦卦辞,命中次数:5545998,占比0.5546%
989988,对应的是雷火丰卦卦辞,命中次数:5545832,占比0.5546%
899889,对应的是山风蛊卦卦辞,命中次数:5545630,占比0.5546%
899988,对应的是雷风恒卦卦辞,命中次数:5545563,占比0.5546%
898989,对应的是火水未济卦卦辞,命中次数:5545468,占比0.5545%
888999,对应的是天地否卦卦辞,命中次数:5545315,占比0.5545%
988899,对应的是风雷益卦卦辞,命中次数:5545286,占比0.5545%
999888,对应的是地天泰卦卦辞,命中次数:5544157,占比0.5544%
998988,对应的是雷泽归妹卦卦辞,命中次数:5543820,占比0.5544%
899898,对应的是水风井卦卦辞,命中次数:5543394,占比0.5543%
889998,对应的是泽山咸卦卦辞,命中次数:5543317,占比0.5543%
989889,对应的是山火贲卦卦辞,命中次数:5542955,占比0.5543%
998898,对应的是水泽节卦卦辞,命中次数:5542900,占比0.5543%
898998,对应的是泽水困卦卦辞,命中次数:5542092,占比0.5542%
988989,对应的是火雷噬嗑卦卦辞,命中次数:5540398,占比0.5540%
988998,对应的是泽雷随卦卦辞,命中次数:5538312,占比0.5538%
898898,对应的是坎为水卦九五,命中次数:5279040,占比0.5279%
988988,对应的是震为雷卦九四,命中次数:5278573,占比0.5279%
889889,对应的是艮为山卦上九,命中次数:5278318,占比0.5278%
888998,对应的是泽地萃卦九五,命中次数:5277648,占比0.5278%
888989,对应的是火地晋卦上九,命中次数:5277628,占比0.5278%
998888,对应的是地泽临卦九二,命中次数:5277383,占比0.5277%
898988,对应的是雷水解卦九四,命中次数:5276684,占比0.5277%
988889,对应的是山雷颐卦上九,命中次数:5276590,占比0.5277%
899888,对应的是地风升卦九三,命中次数:5275993,占比0.5276%
988898,对应的是水雷屯卦九五,命中次数:5275766,占比0.5276%
889898,对应的是水山蹇卦九五,命中次数:5275711,占比0.5276%
898889,对应的是山水蒙卦上九,命中次数:5274543,占比0.5275%
888899,对应的是风地观卦上九,命中次数:5273246,占比0.5273%
889988,对应的是雷山小过卦九四,命中次数:5273043,占比0.5273%
989888,对应的是地火明夷卦九三,命中次数:5270899,占比0.5271%
898888,对应的是地水师卦九二,命中次数:5025661,占比0.5026%
888889,对应的是山地剥卦上九,命中次数:5024354,占比0.5024%
889888,对应的是地山谦卦九三,命中次数:5023523,占比0.5024%
888898,对应的是水地比卦九五,命中次数:5022464,占比0.5022%
888988,对应的是雷地豫卦九四,命中次数:5022103,占比0.5022%
988888,对应的是地雷复卦初九,命中次数:5020392,占比0.5020%
888888,对应的是坤为地卦卦辞,命中次数:4776505,占比0.4777%

可以看出,坤卦独占鳌头,因为都是从89的之卦变来的,虽然采取之卦的只占25%,但是大部分取之卦的都会成为坤卦。紧随其后的就是3个8和3个9的组合,对应的山泽损、风水涣、火山旅、风山渐等,其概率都在0.55%左右,再往后就是4个8和2个9的组合,然后5个8和1个9,6个8……

我们再来看最容易命中的一些爻:

全部结果数量为448,最容易命中的前50爻:
坤为地卦初六,命中次数:35424379,占比3.5424%
坤为地卦六二,命中次数:29607818,占比2.9608%
坤为地卦六三,命中次数:23780315,占比2.3780%
坤为地卦六四,命中次数:17963279,占比1.7963%
地雷复卦初九,命中次数:17363488,占比1.7363%
地水师卦九二,命中次数:15507683,占比1.5508%
地山谦卦九三,命中次数:13646200,占比1.3646%
坤为地卦六五,命中次数:12144650,占比1.2145%
雷地豫卦九四,命中次数:11782543,占比1.1783%
坤为地卦卦辞,命中次数:11213372,占比1.1213%
水地比卦九五,命中次数:9918559,占比0.9919%
风泽中孚卦卦辞,命中次数:8120183,占比0.8120%
天雷无妄卦卦辞,命中次数:8120032,占比0.8120%
巽为风卦卦辞,命中次数:8119114,占比0.8119%
山天大畜卦卦辞,命中次数:8118739,占比0.8119%
泽风大过卦卦辞,命中次数:8117270,占比0.8117%
离为火卦卦辞,命中次数:8116733,占比0.8117%
火泽睽卦卦辞,命中次数:8116215,占比0.8116%
火风鼎卦卦辞,命中次数:8115826,占比0.8116%
风火家人卦卦辞,命中次数:8115727,占比0.8116%
泽火革卦卦辞,命中次数:8115349,占比0.8115%
水天需卦卦辞,命中次数:8114301,占比0.8114%
天水讼卦卦辞,命中次数:8113852,占比0.8114%
天山遁卦卦辞,命中次数:8113817,占比0.8114%
兑为泽卦卦辞,命中次数:8112764,占比0.8113%
雷天大壮卦卦辞,命中次数:8112233,占比0.8112%
山地剥卦上九,命中次数:8060849,占比0.8061%
地泽临卦九二,命中次数:7385294,占比0.7385%
地风升卦九三,命中次数:7375511,占比0.7376%
地火明夷卦九三,命中次数:7372569,占比0.7373%
震为雷卦九四,命中次数:7371632,占比0.7372%
雷水解卦九四,命中次数:7369888,占比0.7370%
泽地萃卦九五,命中次数:7367617,占比0.7368%
坎为水卦九五,命中次数:7367414,占比0.7367%
雷山小过卦九四,命中次数:7367147,占比0.7367%
水雷屯卦九五,命中次数:7365431,占比0.7365%
水山蹇卦九五,命中次数:7364596,占比0.7365%
艮为山卦上九,命中次数:7361710,占比0.7362%
火地晋卦上九,命中次数:7358757,占比0.7359%
山雷颐卦上九,命中次数:7356135,占比0.7356%
山水蒙卦上九,命中次数:7355175,占比0.7355%
风地观卦上九,命中次数:7354501,占比0.7355%
泽天夬卦卦辞,命中次数:6909872,占比0.6910%
火天大有卦卦辞,命中次数:6909585,占比0.6910%
天泽履卦卦辞,命中次数:6908897,占比0.6909%
风天小畜卦卦辞,命中次数:6908345,占比0.6908%
天火同人卦卦辞,命中次数:6906485,占比0.6906%
天风姤卦卦辞,命中次数:6904675,占比0.6905%
风水涣卦卦辞,命中次数:6352285,占比0.6352%
山泽损卦卦辞,命中次数:6351348,占比0.6351%

不同的六爻结果根据朱熹的解卦法映射到不同的爻辞,384个爻辞+64个卦辞共计448个结果。在这其中坤卦居首,后面五阴一阳的次之,而其顺序也是由阳爻的位置从下到上,因为主要影响的因素在于“四爻变者,则以之卦中二不变之爻辞占,以下爻之辞为主;”所以四个爻都是9的,会优先取下面的爻辞,故地雷复>地水师>地山谦。

顺带一提,最不容易出现的:

最不容易命中的前50爻:
天风姤卦初六,命中次数:880,占比0.0001%
天水讼卦初六,命中次数:2766,占比0.0003%
巽为风卦初六,命中次数:2894,占比0.0003%
火风鼎卦初六,命中次数:2910,占比0.0003%
天山遁卦初六,命中次数:2917,占比0.0003%
天山遁卦六二,命中次数:2934,占比0.0003%
泽风大过卦初六,命中次数:2980,占比0.0003%
天火同人卦六二,命中次数:3569,占比0.0004%
天泽履卦六三,命中次数:6272,占比0.0006%
风天小畜卦六四,命中次数:8931,占比0.0009%
风火家人卦六二,命中次数:10318,占比0.0010%
离为火卦六二,命中次数:10434,占比0.0010%
天雷无妄卦六二,命中次数:10499,占比0.0010%
天雷无妄卦六三,命中次数:10525,占比0.0011%
泽火革卦六二,命中次数:10597,占比0.0011%
天水讼卦六三,命中次数:10655,占比0.0011%
火天大有卦六五,命中次数:11558,占比0.0012%
泽天夬卦上六,命中次数:14247,占比0.0014%
火山旅卦初六,命中次数:14831,占比0.0015%
风山渐卦初六,命中次数:14887,占比0.0015%
天地否卦六二,命中次数:14960,占比0.0015%
天地否卦初六,命中次数:14962,占比0.0015%
泽山咸卦六二,命中次数:14984,占比0.0015%
泽水困卦初六,命中次数:14985,占比0.0015%
山风蛊卦初六,命中次数:15029,占比0.0015%
泽山咸卦初六,命中次数:15041,占比0.0015%
火水未济卦初六,命中次数:15063,占比0.0015%
雷风恒卦初六,命中次数:15064,占比0.0015%
风水涣卦初六,命中次数:15095,占比0.0015%
火山旅卦六二,命中次数:15103,占比0.0015%
风山渐卦六二,命中次数:15116,占比0.0015%
水风井卦初六,命中次数:15131,占比0.0015%
天地否卦六三,命中次数:15285,占比0.0015%
火泽睽卦六三,命中次数:17990,占比0.0018%
风泽中孚卦六四,命中次数:17992,占比0.0018%
风泽中孚卦六三,命中次数:18055,占比0.0018%
风火家人卦六四,命中次数:18101,占比0.0018%
巽为风卦六四,命中次数:18148,占比0.0018%
兑为泽卦六三,命中次数:18169,占比0.0018%
山天大畜卦六五,命中次数:25586,占比0.0026%
火风鼎卦六五,命中次数:25597,占比0.0026%
水天需卦六四,命中次数:25661,占比0.0026%
火泽睽卦六五,命中次数:25678,占比0.0026%
山天大畜卦六四,命中次数:25716,占比0.0026%
离为火卦六五,命中次数:25805,占比0.0026%
乾为天卦初九,命中次数:26199,占比0.0026%
泽火革卦上六,命中次数:33050,占比0.0033%
泽风大过卦上六,命中次数:33128,占比0.0033%
水天需卦上六,命中次数:33354,占比0.0033%
雷天大壮卦上六,命中次数:33480,占比0.0033%

从文王做卦后,周公旦就做了很多修改。从“武人为之大君”,“康侯用锡马蕃庶“等词汇也能看出,周宣王时期之后依然也有新的编辑,而后孔子及其儒家弟子所做【传】时,对原来的【经】也未必原封不动。我认为古人虽然不会计算的如此精确,但对高频出现的爻辞如果不适合必然会加以修正,亦或者朱熹在整理解卦方法时,也会带有相应的考量。注意,朱熹记载的解卦法是由朱熹和他的学生蔡元定基于古代文献整理归纳而出的,而不是自己编的,所以不能说这套解卦理论产于宋代。其也是从更早的时代流传下来的。

我们看一下这些高频出现的爻辞,寻找其是否有些关联性:

首先坤卦整体都是柔顺厚德载物之象,也是为臣为辅之道,除了上六物极必反,其他爻辞大体都是好的,至少是无咎。而【龙战于野,其血玄黄】的上六概率却非常低,因为要得坤卦上六的话,除了888889有0.6%的概率,其他的爻中都必须带6,而取6这个数是很难的,相当于每次左右手分蓍草的结果都要整除4。888886的概率只有0.017%,而【886886,888866,868886,888686,688886】都只有0.0006%的概率。

剩下的高频卦爻以一阳五阴的组合为主,那可想而知,这个阳爻的爻辞还差的了吗?

地雷复卦初九:不复远,无祗悔,元吉

地水师卦九二:在师中,吉无咎,王三锡命

地山谦卦九三:劳谦君子,有终吉

雷地豫卦九四:由豫,大有得。勿疑。朋盍簪。

水地比卦九五:显比,王用三驱,失前禽。邑人不诫,

那么这就很清晰了,按照这种卜卦方法,得以吉的概率很大。所以说,大家占卜完全不用慌,大概率都是好的,就当听吉祥话了,哈哈。

最后附上完整代码:

const G8map = {"111": {"name": "乾","index": 7,"nature": "天"},"000": {"name": "坤","index": 0,"nature": "地"},"001": {"name": "震","index": 4,"nature": "雷"},"110": {"name": "巽","index": 3,"nature": "风"},"010": {"name": "坎","index": 2,"nature": "水"},"101": {"name": "离","index": 5,"nature": "火"},"100": {"name": "艮","index": 1,"nature": "山"},"011": {"name": "兑","index": 6,"nature": "泽"},
}
const G64_name = ["乾为天卦", "坤为地卦", "屯卦", "蒙卦", "需卦", "讼卦", "师卦", "比卦","小畜卦", "履卦", "泰卦", "否卦", "同人卦", "大有卦", "谦卦", "豫卦","随卦", "蛊卦", "临卦", "观卦", "噬嗑卦", "贲卦", "剥卦", "复卦","无妄卦", "大畜卦", "颐卦", "大过卦", "坎为水卦", "离为火卦", "咸卦", "恒卦","遁卦", "大壮卦", "晋卦", "明夷卦", "家人卦", "睽卦", "蹇卦", "解卦","损卦", "益卦", "夬卦", "姤卦", "萃卦", "升卦", "困卦", "井卦","革卦", "鼎卦", "震为雷卦", "艮为山卦", "渐卦", "归妹卦", "丰卦", "旅卦","巽为风卦", "兑为泽卦", "涣卦", "节卦", "中孚卦", "小过卦", "既济卦", "未济卦"
]
const yao_name_0 = ['初六', '六二', '六三', '六四', '六五', '上六']
const yao_name_1 = ['初九', '九二', '九三', '九四', '九五', '上九']const G64_index = [[+1, 14, +6, 45, 23, 35, 18, 10], // 地[22, 51, +3, 17, 26, 21, 40, 25], // 山[+7, 38, 28, 47, +2, 62, 59, +4], // 水[19, 52, 58, 56, 41, 36, 60, +8], // 风[15, 61, 39, 31, 50, 54, 53, 33], // 雷[34, 55, 63, 49, 20, 29, 37, 13], // 火[44, 30, 46, 27, 16, 48, 57, 42], // 泽[11, 32, +5, 43, 24, 12, +9, +0], // 乾//[地, 山, 水, 风, 雷, 火, 泽, 乾]
]
const statistics = {describe: {},remainder: {},result: {},change_count: {0: 0,1: 0,2: 0,3: 0,4: 0,5: 0,6: 0,}
}
// 获取64卦上下卦
function get_G64_iter(Gid) {for (let i = 0; i < 8; i++) {for (let j = 0; j < 8; j++) {if (Gid === G64_index[i][j]) {return { shang: i, xia: j }}}}
}
// 获取八卦信息
function get_G8_info(index) {for (const key in G8map) {const info = G8map[key]if (info.index === index) {return info}}
}
// 测试用输出64卦名
function output_G64_name() {for (let iter = 0; iter < G64_name.length; iter++) {const { shang, xia } = get_G64_iter(iter)if (shang === xia) {console.log(`${G64_name[iter]}`)} else {console.log(`${get_G8_info(shang).nature}${get_G8_info(xia).nature}${G64_name[iter]}`)}}
}
// 根据六爻获取卦名
function get_G64_name_by_str(str) {const shang_key = str.slice(0, 3)const xia_key = str.slice(3, 6)const shang = G8map[shang_key].indexconst xia = G8map[xia_key].indexconst Gid = G64_index[shang][xia]if (shang === xia) {return `${G64_name[Gid]}`} else {return `${get_G8_info(shang).nature}${get_G8_info(xia).nature}${G64_name[Gid]}`}
}
// 获取单个爻辞
const used_count = 49 // 大衍之数五十,其用四十有九。
function get_yao() {let remainder = used_countfor (let i = 0; i < 3; i++) {remainder-- // 挂一以象三let min_count = 0;min_count = Math.floor(remainder / 5)// 按照常理来说一分为二大家趋近于平衡,至少不低于总数20%,很少某一边就留下1根另外一边很多,不然这就是完全可控的结果了,是为不诚。这行去掉也不太影响结果。const left = Math.floor(Math.random() * (remainder - min_count * 2)) + min_count// 分而为二以象两const right = remainder - leftconst left_cost = left % 4 || 4 // 揲之以四以象四时,归奇于扐以象闰const right_cost = right % 4 || 4// 五岁再闰,故再扐而后挂remainder = remainder - left_cost - right_cost + 1}remainder--if (statistics.remainder[remainder]) {statistics.remainder[remainder]++} else {statistics.remainder[remainder] = 1}return remainder / 4
}
// 朱熹解卦法
function zhuxi_jie(ben_G_name, zhi_G_name, change_count, yao_arr) {/*1、六爻皆不变者,则占本卦卦辞;2、一爻变者,则以本卦变爻之辞占;3、二爻变者,则以本卦二变爻之辞占,而以上爻之辞为主;4、三爻变者,则占本卦及之卦的卦辞,而以本卦为主;5、四爻变者,则以之卦中二不变之爻辞占,以下爻之辞为主;6、五爻变者,则以之卦中不变爻的爻辞占;7、六爻皆变者,则以乾坤二用之辞占,并参考其之卦卦辞。*/switch (change_count) {case 0:case 3:return `${ben_G_name}卦辞`case 1:case 2:for (let i = yao_arr.length - 1; i >= 0; i--) {if (yao_arr[i] === 6) {return `${ben_G_name}${yao_name_0[i]}`}if (yao_arr[i] === 9) {return `${ben_G_name}${yao_name_1[i]}`}}break;case 4:case 5:for (let i = 0; i < yao_arr.length; i++) {if (yao_arr[i] === 7) {return `${zhi_G_name}${yao_name_1[i]}`}if (yao_arr[i] === 8) {return `${zhi_G_name}${yao_name_0[i]}`}}break;case 6:return `${zhi_G_name}卦辞`default:console.log("error change_count::", ben_G_name, zhi_G_name, change_count, yao_arr)break;}
}
const reuslt_cache = {}
// 大衍筮法
function DYSF() {let ben_G_str = '';let zhi_G_str = '';let change_count = 0const yao_arr = new Array()// 6,7,8,9let yao_str = ''for (let i = 0; i < 6; i++) {const y = get_yao()yao_arr.push(y)yao_str += y.toString()}// console.log("占得六爻为:", yao_arr)for (let i = yao_arr.length - 1; i >= 0; i--) {switch (yao_arr[i]) {case 6:ben_G_str += '0'zhi_G_str += '1'change_count++break;case 7:ben_G_str += '1'zhi_G_str += '1'break;case 8:ben_G_str += '0'zhi_G_str += '0'break;case 9:ben_G_str += '1'zhi_G_str += '0'change_count++break;default:console.log("error yao_arr::", yao_arr[i])break;}}const ben_G_name = get_G64_name_by_str(ben_G_str)const zhi_G_name = get_G64_name_by_str(zhi_G_str)let describeif (reuslt_cache[yao_str]) {describe = reuslt_cache[yao_str]} else {describe = zhuxi_jie(ben_G_name, zhi_G_name, change_count, yao_arr)reuslt_cache[yao_str] = describe}// console.log(`本卦:${ben_G_name},之卦${zhi_G_name},应参考${describe},变爻数${change_count}`)return { describe, change_count, yao_str }
}const run_count = 10000 * 10000 * 10
function run() {for (let i = 0; i < run_count; i++) {const { describe, change_count, yao_str } = DYSF()if (statistics.describe[describe]) {statistics.describe[describe]++} else {statistics.describe[describe] = 1}if (statistics.result[yao_str]) {statistics.result[yao_str]++} else {statistics.result[yao_str] = 1}statistics.change_count[change_count]++if (i && i % 10000000 === 0) {console.log(`进度${i / run_count * 100}%`)}}const describe_sort_arr = Object.keys(statistics.describe).map((key) => {return {describe: key,count: statistics.describe[key]}})describe_sort_arr.sort((itemA, itemB) => {return itemB.count - itemA.count;});const result_sort_arr = Object.keys(statistics.result).map((key) => {return {result: key,count: statistics.result[key]}})result_sort_arr.sort((itemA, itemB) => {return itemB.count - itemA.count;});console.log("占卜单爻统计:")for (const k in statistics.remainder) {console.log(`触发剩余${k / 4}堆的次数:${statistics.remainder[k]},占比${(statistics.remainder[k] / (run_count * 6) * 100).toFixed(4)}%`)}console.log("变爻数量统计:")for (const k in statistics.change_count) {console.log(`触发变爻${k}个的次数:${statistics.change_count[k]},占比${(statistics.change_count[k] / run_count * 100).toFixed(4)}%`)}console.log(`最高频率出现的六爻组合:`)for (let i = 0; i < result_sort_arr.length; i++) {console.log(`${result_sort_arr[i].result},对应的是${reuslt_cache[result_sort_arr[i].result]},命中次数:${result_sort_arr[i].count},占比${(result_sort_arr[i].count / run_count * 100).toFixed(4)}%`)}const count = 50console.log(`全部结果数量为${describe_sort_arr.length},最容易命中的前${count}爻:`)for (let i = 0; i < count; i++) {console.log(`${describe_sort_arr[i].describe},命中次数:${describe_sort_arr[i].count},占比${(describe_sort_arr[i].count / run_count * 100).toFixed(4)}%`)}console.log(`最不容易命中的前${count}爻:`)for (let i = 0; i < count; i++) {console.log(`${describe_sort_arr[describe_sort_arr.length - 1 - i].describe},命中次数:${describe_sort_arr[describe_sort_arr.length - 1 - i].count},占比${(describe_sort_arr[describe_sort_arr.length - 1 - i].count / run_count * 100).toFixed(4)}%`)}
}
run()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/100166.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第11步---MySQL的优化

第11步---MySQL的优化 1.概念 原先写功能。后来对平静进行优化 设计 查询语句 索引 存储 2.查看执行效率 -- 查看当前会话sql得执行类型得统计信息SHOW session STATUS like Com%上面展示得信息就是统计了当前会话得执行得操作得次数。 -- 查看全局得 SHOW GLOBAL STATU…

使用 PyTorch 进行高效图像分割:第 3 部分

一、说明 在这个由 4 部分组成的系列中&#xff0c;我们将使用 PyTorch 中的深度学习技术从头开始逐步实现图像分割。本部分将重点介绍如何使用深度可分离卷积来优化我们的 CNN 基线模型&#xff0c;以减少可训练参数的数量&#xff0c;使模型可部署在移动设备和其他边缘设备上…

opencv如何调用YOLOv5(无pytorch)

目录 一、前言 二.正文 2.1定义颜色 2.2目标检测主代码详解 2.3读取视频or图片进行检测 注意&#xff1a;opencv-python 本文使用的版本为4.5.2.52 一、前言 YOLO系列是one-stage且是基于深度学习的回归方法&#xff0c;而R-CNN、Fast-RCNN、Faster-RCNN等是two-stage且…

计算机网络第2章(物理层)

计算机网络第2章&#xff08;物理层&#xff09; 2.1 物理层的基本概念2.2 物理层下面的传输媒体2.2.1 导引型传输媒体2.2.2 非导引型传输媒体 2.3 传输方式2.3.1 串行传输和并行传输2.3.2 同步传输和异步传输2.3.3 单向通信&#xff08;单工&#xff09;、双向交替通信&#x…

很好的启用window10专业版系统自带的远程桌面

启用window10专业版系统自带的远程桌面 文章目录 启用window10专业版系统自带的远程桌面前言1.找到远程桌面的开关2. 找到“应用”项目3. 打开需要远程操作的电脑远程桌面功能 总结 前言 Windows操作系统作为应用最广泛的个人电脑操作系统&#xff0c;在我们身边几乎随处可见。…

分布式事务(4):两阶段提交协议与三阶段提交区别

1 两阶段提交协议 两阶段提交方案应用非常广泛&#xff0c;几乎所有商业OLTP数据库都支持XA协议。但是两阶段提交方案锁定资源时间长&#xff0c;对性能影响很大&#xff0c;基本不适合解决微服务事务问题。 缺点&#xff1a; 如果协调者宕机&#xff0c;参与者没有协调者指…

如何在window下cmd窗口执行linux指令?

1.Git&#xff1a;https://git-scm.com/downloads(官网地址) 2.根据自己的实际路径,添加两个环境变量 3.重启电脑

Kubernetes教程—查看 Pod 和节点

目标 了解 Kubernetes Pod。了解 Kubernetes 节点。对已部署的应用故障排除。 Kubernetes Pod 在模块 2 中创建 Deployment 时, Kubernetes 创建了一个 Pod 来托管你的应用实例。Pod 是 Kubernetes 抽象出来的&#xff0c; 表示一组一个或多个应用容器&#xff08;如 Docker…

爬虫借助代理会让网速快点吗?

亲爱的程序员朋友们&#xff0c;你曾经遇到过爬虫网速慢的情况吗&#xff1f;别着急&#xff01;今天我将和你一起探讨一下使用代理是否可以加速爬虫&#xff0c;让我们一起进入这个轻松又专业的知识分享。 一、原因和机制的解析 1.IP限制 某些网站为了保护资源和防止爬虫行…

线段树详解——影子宽度

OK&#xff0c;今天来讲一讲线段树~~ 线段树是什么线段树的实现线段树的时间复杂度线段树的应用线段树的节点结构其他操作和优化例题——影子宽度输入输出格式输入格式输出格式 输入输出样例输入样例输出样例 例题讲解 线段树是什么 线段树&#xff08; S e g m e n t Segmen…

Goland 注释时自动在注释符号后添加空格

不得不说 JetBrains 旗下的 IDE 都好用&#xff0c;而且对于注释这块&#xff0c;使用 Ctrl / 进行注释的时候&#xff0c;大多会在每个注释符号后统一添加一个空格&#xff0c;比如 PyCharm 和 RubeMine 等。 # PyCharm # print("hello world") # RubyMine # req…

Confluent kafka 异常退出rd_tmpabuf_alloc0: rd kafka topic info_new_with_rack

rd_tmpabuf_alloc0: rd kafka topic info_new_with_rack 根据网上的例子&#xff0c;做了一个测试程序。 C# 操作Kafka_c# kafka_Riven Chen的博客-CSDN博客 但是执行下面一行时&#xff0c;弹出上面的异常&#xff0c;闪退。 consumer.Subscribe(queueName) 解决方案&…

攻防世界-supersqli

原题 解题思路 直接查找看不到明显的回显变化 先找回显变化数量 -1 order by 2 #如果是3列就报错&#xff0c;说明只有两列。接下来找数据库名称&#xff1a; -1 union select 1,databases # 结果是后端做了一些简单的过滤&#xff0c;需要更换查找语句。 -1; show …

sNMFcross-entropyK

0.简单介绍 稀疏非负矩阵&#xff08;sNMF&#xff09;和最小二乘优化来产生祖先比例估计数的祖先推断算法&#xff0c;这个算法呢与admixture来说差别不是很大&#xff0c;但是优点就是快&#xff0c;运算速度可以快到10-30倍左右。 1.安装 这一步不必多说&#xff0c;下载…

PHP加密与安全的最佳实践

PHP加密与安全的最佳实践 概述 在当今信息时代&#xff0c;数据安全是非常重要的。对于开发人员而言&#xff0c;掌握加密和安全的最佳实践是必不可少的。PHP作为一种常用的后端开发语言&#xff0c;提供了许多功能强大且易于使用的加密和安全性相关函数和类。本文将介绍一些P…

C# WPF ListBox 动态显示图片

前言 最近在和其他软件联合做一个本地图片选择传输功能&#xff0c;为此希望图片能够有序的呈现在客户端&#xff0c;简单的实现了一下功能&#xff0c;通过Mvvm模式进行呈现&#xff0c;过程简单通俗&#xff0c;话不多说直接上图。 处理过程 前台代码 你只需要粘贴到你的前台…

c#设计模式-结构型模式 之 桥接模式

前言 桥接模式是一种设计模式&#xff0c;它将抽象与实现分离&#xff0c;使它们可以独立变化。这种模式涉及到一个接口作为桥梁&#xff0c;使实体类的功能独立于接口实现类。这两种类型的类可以结构化改变而互不影响。 桥接模式的主要目的是通过将实现和抽象分离&#xff0c;…

css学习2(利用id与class修改元素)

1、id选择器可以为标有特定id的html元素指定特定的样式。 2、选择器以#开头&#xff0c;后跟某id的属性值。 3、class选择器用于描述一组元素的样式&#xff0c;class可以在多个元素使用。 4、类选择器用.选择。 5、指定特定的元素使用class。 6、元素的多个类用空格分开&…

SpringCloud学习笔记(一)_快速入门

SpringCloud简介 Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具&#xff08;例如配置管理&#xff0c;服务发现&#xff0c;断路器&#xff0c;智能路由&#xff0c;微代理&#xff0c;控制总线&#xff09;。分布式系统的协调导致了样板模式, 使用Spr…

【React】生命周期和钩子函数

概念 组件从被创建到挂载到页面中运行&#xff0c;再到组件不用时卸载的过程。 只有类组件才有生命周期。 分为三个阶段&#xff1a; 挂载阶段更新阶段销毁阶段 三个阶段 挂载阶段 钩子函数 - constructor 创建阶段触发 作用&#xff1a;创建数据 之前定义状态是简写&…