程式設計師怎麼給娃起名?當然是寫個指令碼!
highlight: vs2015
導讀
給孩子起名是個挺講究的事,有的直接花錢讓人算,有的用族譜排字輩,有的用特別喜歡的詩詞或歷史事件。是不是封建迷信咱暫且不論,這是為人父母美好心願的一種最直接體現,畢竟人活著還是需要精神上的滿足的。本文的理論基礎主要是五格剖象法加八字四柱五行相結合,嘗試用 JS 指令碼實現半自動化起名。
背景
筆者對中國傳統文化比較感興趣,周易、八字、中醫、打坐什麼的都研究過一點,五行八卦之類的原理也差不多瞭解個七七八八。最近需要給孩子起名,沒有族譜,也沒什麼特別喜歡的詩詞,那麼就只能自己研究起名了。有朋友問了,為什麼不自己花錢起呢?碼農嘛,~~能不花錢的地方肯定就不花錢了~~,這麼好的研究數理的機會怎麼能錯過呢,而且自己造的輪子才最好用不是。
五格剖象法據說是 1918 年初,由日本人熊崎健翁開創。所以嚴格來說只算是基於中國傳統文化的理論創造的一種實踐方式,可以簡單理解為用名字筆畫數湊“幸運數字”。具體規則和原理這裡就不做贅述了,想了解詳情的同學請自行查閱。
因為五格剖象法只是簡單的用數字來看吉凶,維度太單一。漢字是分五行的,老百姓都知道的一個道理:八字裡缺什麼,就補什麼(實際上更復雜一些,有藏幹之類的),比如淼、鑫、林、森這些字在名字當中就是很常見的。於是筆者又結合八字的【四柱五行】補充了五格的實踐。可惜的是,四柱五行的規律太複雜了,不適合從零造輪子,所以是直接使用現成的軟體。
市面上收錢起名字的也差不多是這個套路了。最後,再綜合考慮一下寓意和平仄,那麼起出來的名字肯定不會差。
PS:貌似現在只能起三個字的名字了,據說是防止重名的太多。
效果展示
假設孩子姓【趙】,缺【金】【土】,女孩。
啟動指令碼並使用:
結果檔案:
隨便挑一個測一下,比如【宸巍】:
有興趣的同學可以自己試一下,這個名字除了外格(不重要),都是吉數。另外,筆者把拼音也加上了,因為出的結果動不動就上萬個,所以一旦確定了喜歡的發音,就可以按拼音搜尋了。
正文
使用說明
畢竟是半自動的,所以還是要有一些人工操作在的。另外需要說明一下,你得起碼會使用 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 就是 字
Recordeg:
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]
},
]
```
核心邏輯
- 根據性別和五格吉凶數字庫生成所有吉的數字,並去重;
- 暴力三層遍歷:
- 先選取個吉數,減去【姓】的筆畫,得到剩餘筆畫;
- 暴力遍歷所有筆畫相加等於剩餘筆畫數的兩個字,當然前提是經過了五行的篩選;
- 跳回第一層,選取另一個吉數,執行下一個迴圈。 這樣做的效果是:總格、人格、地格肯定是吉數,天格不受控,外格不保證效果,但由於外格沒那麼重要就隨緣了;
- 將結果資料進行友好性處理,生成檔案。
小提示:由於有拼音在,所以可以試著直接搜一下自己想要的發音。 貼一點核心程式碼片段,大家意思意思
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}` ); } }); } }); } });
結語
可以看到,邏輯其實非常簡單,實現成本也不大,一兩天就能搞出來。想想也是,筆者也不可能因為給娃起個名投入一週開發這麼個玩意(嗯。。。好像也不一定)。不過既然搞出來了,乾脆優化一下發出來得了,一是給大家圖個樂子,二是萬一誰真的用了那豈不是功德一件。
所以本文娛樂性要多一點,實用性就那麼回事,反正筆者是通過這個給娃起的名字,分還挺高。雖然自己也知道不一定靠譜,但起碼咱跑分高。
夫五行者。蓋造化之根源。人倫之資始。萬品稟其變易。百靈因其感通。本乎陰陽。散乎精像。周竟天地。布極幽明。子午卯酉為經緯。八風六律為綱紀。故天有五度以垂象。地有五材以資用。人有五常以表德。萬有森羅。——《五行大義》
參考文獻
- 看我用 Linux 帶娃,培養程式設計興趣
- 【微前端】Qiankun Vue3 配置
- 通用 Form API 協議 - 基礎版
- Final Form 設計思路淺析
- 【低程式碼漫談】 lowcode-engine - Vue Renderer 嘗試
- Redash 設計理念淺析
- Metabase 設計理念淺析
- DataEase 設計理念淺析
- 開源 BI 工具調研:Superset、Metabase、Redash、DataEase(一)- 基本資料
- Ubuntu 一行命令裝軟體——VirtualBox
- 程式設計師怎麼給娃起名?當然是寫個指令碼!
- GoGoCode - 像用 Jquery 一樣方便地處理 AST
- 【gRPC】Web 請求的 TS 封裝 - 完美版
- 【gRPC】2 分鐘學會 Protocol Buffer 語法
- 【gRPC】封裝前端網路請求的核心思想 - TS版
- 如何避免 Vue 的漏洞破壞單向資料流
- 用函數語言程式設計寫出“傻瓜”都能看懂的程式碼
- Vue3 最佳實踐之編碼規範