程式設計師怎麼給娃起名?當然是寫個指令碼!

語言: CN / TW / HK

highlight: vs2015

導讀

給孩子起名是個挺講究的事,有的直接花錢讓人算,有的用族譜排字輩,有的用特別喜歡的詩詞或歷史事件。是不是封建迷信咱暫且不論,這是為人父母美好心願的一種最直接體現,畢竟人活著還是需要精神上的滿足的。本文的理論基礎主要是五格剖象法八字四柱五行相結合,嘗試用 JS 指令碼實現半自動化起名。

背景

筆者對中國傳統文化比較感興趣,周易、八字、中醫、打坐什麼的都研究過一點,五行八卦之類的原理也差不多瞭解個七七八八。最近需要給孩子起名,沒有族譜,也沒什麼特別喜歡的詩詞,那麼就只能自己研究起名了。有朋友問了,為什麼不自己花錢起呢?碼農嘛,~~能不花錢的地方肯定就不花錢了~~,這麼好的研究數理的機會怎麼能錯過呢,而且自己造的輪子才最好用不是。

五格剖象法據說是 1918 年初,由日本人熊崎健翁開創。所以嚴格來說只算是基於中國傳統文化的理論創造的一種實踐方式,可以簡單理解為用名字筆畫數湊“幸運數字”。具體規則和原理這裡就不做贅述了,想了解詳情的同學請自行查閱。

因為五格剖象法只是簡單的用數字來看吉凶,維度太單一。漢字是分五行的,老百姓都知道的一個道理:八字裡缺什麼,就補什麼(實際上更復雜一些,有藏幹之類的),比如淼、鑫、林、森這些字在名字當中就是很常見的。於是筆者又結合八字的【四柱五行】補充了五格的實踐。可惜的是,四柱五行的規律太複雜了,不適合從零造輪子,所以是直接使用現成的軟體。

市面上收錢起名字的也差不多是這個套路了。最後,再綜合考慮一下寓意和平仄,那麼起出來的名字肯定不會差。

PS:貌似現在只能起三個字的名字了,據說是防止重名的太多。

效果展示

假設孩子姓【趙】,缺【金】【土】,女孩。

啟動指令碼並使用:

image.png

結果檔案:

image.png

隨便挑一個測一下,比如【宸巍】:

image.png

有興趣的同學可以自己試一下,這個名字除了外格(不重要),都是吉數。另外,筆者把拼音也加上了,因為出的結果動不動就上萬個,所以一旦確定了喜歡的發音,就可以按拼音搜尋了。

正文

使用說明

畢竟是半自動的,所以還是要有一些人工操作在的。另外需要說明一下,你得起碼會使用 github 和 nodejs 的一些基本操作,才能用這個指令碼。當然如果你只是想看個熱鬧,那也是非常歡迎的。 1. 用八字排盤軟體檢視五行情況,選出需要補強的五行屬性,注意要看藏幹後的結果; 2. git clone 筆者的 github 專案,進入目錄執行 npm i && npm run build; 3. 執行 npm start 根據提示輸入資訊並檢視結果; 4. 綜合考慮平仄韻律和寓意等,選取一些心儀的名字; 5. 找個姓名打分軟體測一下分數(一定要有結合八字的),選出滿意的名字。不過這個網站某些字的筆畫數會錯,跟指令碼的文字型檔不一樣,要以康熙字典)為準,如果發現指令碼庫的資料不對,請留言。

小技巧:進行完第 3 步時,先隨便選個名字組合,去第 5 步的網站測一下,看看五行是不是取對了。如果沒取對就重新取五行。

實現

具體程式碼就不貼了,可以到github 倉庫檢視,這裡只說一下程式碼實現的基本邏輯。

基礎資料

首先需要準備基本資料:文字型檔,五格吉凶數字庫,如下:

文字型檔

資料格式用 ts 表示如下: ```ts // 五行 enum Ele { wood, fire, earth, metal, water, }

// key 就是 字 Record eg:json { "一":{"char":"一","ele":2,"strokes":1,"sound":"yi"}, "乙":{"char":"乙","ele":2,"strokes":1,"sound":"yi"}, "刁":{"char":"刁","ele":1,"strokes":2,"sound":"diao"}, // ... } ```

五格吉凶數字庫

資料格式用 ts 表示如下: ```ts enum Sex { female, male, }

Array<{ desc: string; score: -2 | -1 | 0 | 1 | 2; // 吉正數;凶負數,處理的時候要剔除 sex?: Sex; // 部分吉凶只針對男性或女性,使用時會根據性別進行過濾 nums: number[]; }> eg:json [
{ "desc": "女德運暗示數(具有婦德,品性溫良,助夫愛子)", "score": 1, "sex": 0, "nums": [5, 6, 11, 13, 15, 16, 24, 32, 35] }, { "desc": "女性孤寡運暗示數(難覓夫君,家庭不和,夫妻兩虎相鬥,離婚,嚴重者夫妻一方早亡)", "score": -2, "sex": 0, "nums": [21, 23, 26, 28, 29, 33, 39] }, ] ```

核心邏輯

  1. 根據性別五格吉凶數字庫生成所有吉的數字,並去重;
  2. 暴力三層遍歷:
    • 先選取個吉數,減去【姓】的筆畫,得到剩餘筆畫;
    • 暴力遍歷所有筆畫相加等於剩餘筆畫數的兩個字,當然前提是經過了五行的篩選;
    • 跳回第一層,選取另一個吉數,執行下一個迴圈。 這樣做的效果是:總格、人格、地格肯定是吉數,天格不受控,外格不保證效果,但由於外格沒那麼重要就隨緣了;
  3. 將結果資料進行友好性處理,生成檔案。

    小提示:由於有拼音在,所以可以試著直接搜一下自己想要的發音。 貼一點核心程式碼片段,大家意思意思 ts numData.nums.forEach((num) => { const rest = num - surStks; if (rest > 1) { chars.forEach((secd) => { const manScore = surStks + secd.strokes; const lastRest = rest - secd.strokes; if ( allGoodNums.includes(manScore) && lastRest > 0 && secd.ele === eles[0] ) { chars.forEach((last) => { const earthScore = secd.strokes + last.strokes; if ( allGoodNums.includes(earthScore) && last.ele === eles[1] && lastRest === last.strokes ) { const { cosmos, man, earth, outside, total } = getNameScore({ surnameData, secondNameData: secd, lastnameData: last, }); result.push( `${secd.char}${last.char}(${secd.sound},${last.sound}):總${total}人${man}地${earth}天${cosmos}外${outside}` ); } }); } }); } });

結語

可以看到,邏輯其實非常簡單,實現成本也不大,一兩天就能搞出來。想想也是,筆者也不可能因為給娃起個名投入一週開發這麼個玩意(嗯。。。好像也不一定)。不過既然搞出來了,乾脆優化一下發出來得了,一是給大家圖個樂子,二是萬一誰真的用了那豈不是功德一件。

所以本文娛樂性要多一點,實用性就那麼回事,反正筆者是通過這個給娃起的名字,分還挺高。雖然自己也知道不一定靠譜,但起碼咱跑分高。

夫五行者。蓋造化之根源。人倫之資始。萬品稟其變易。百靈因其感通。本乎陰陽。散乎精像。周竟天地。布極幽明。子午卯酉為經緯。八風六律為綱紀。故天有五度以垂象。地有五材以資用。人有五常以表德。萬有森羅。——《五行大義》

參考文獻