ITPub博客

首页 > 数据库 > 数据库开发技术 > 程序员怎么给娃起名?当然是写个脚本!

程序员怎么给娃起名?当然是写个脚本!

原创 数据库开发技术 作者:IT枫斗者 时间:2021-12-07 21:54:10 0 删除 编辑

给孩子取名是一件很讲究的事情,有的直接花钱让人算,有的用族谱排字,有的用特别喜欢的诗歌或历史事件。暂时不管封建迷信是不是,这是父母美好愿望最直接的体现。毕竟人活着还是需要精神上的满足。本文的理论基础主要是五格剖象法与八字四柱五行相结合,试图用JS脚本实现半自动命名。


背景

我有个朋友对中国传统文化更感兴趣,周易、八字、中医、冥想等都研究过一点,五行八卦等原则也几乎了解了七七八八。最近需要给孩子起名,没有族谱,没有特别喜欢的诗,只能自己研究命名。他朋友问,为什么不自己花钱?码农,不花钱的地方肯定不花钱。怎么会错过这么好的研究数学的机会,最好用自己的轮子。


据说五格剖象法是由日本熊崎健翁于1918年初创造的。因此,严格地说,它只是基于中国传统文化理论创造的一种实践方式,可以简单地理解为用名字笔画幸运数字。这里就不赘述具体的规则和原则了,想了解细节的同学请自行查阅。


因为五格剖象法只是用数字看吉凶,维度太单一。汉字分为五行,普通人都知道一个道理:八字缺什么就补什么(其实比较复杂,有藏干之类的),比如苗、鑫、林、森这个词在名字里很常见。因此,笔者结合八字【四柱五行】补充了五格的实践。不幸的是,四柱五行的规律过于复杂,不适合零造轮,因此直接使用现成软件。


这几乎是市场上收钱命名的套路。最后,综合考虑寓意和平仄,那么名字肯定不会差。


效果展示

假设孩子姓【赵】,缺【金】【土】,女孩。

启动脚本并使用:


结果文件:

随便挑一个测一下,比如【宸巍】:



感兴趣的学生可以自己试试。除了外观(不重要),这个名字是吉祥的。此外,作者还添加了拼音,因为成千上万的结果,所以一旦你确定了你最喜欢的发音,你可以根据拼音搜索。


正文

使用说明

毕竟是半自动的,所以还是要有一些人工操作。另外需要注意的是,在使用这个脚本之前,你必须至少使用github和nodejs的一些基本操作。当然,如果你只想看热闹,也很受欢迎。


基础数据

首先,准备基本数据:文字库、五格吉凶数字库,如下:


文字库

数据格式用 ts 表示如下:

// 五行enum Ele {  wood,  fire,  earth,  metal,  water,}
// key 就是 字Record<string, { char: string; // 字 ele: Ele; // 五行 strokes: number; // 笔画 sound: string; // 拼音}>


eg:

{  "一":{"char":"一","ele":2,"strokes":1,"sound":"yi"},  "乙":{"char":"乙","ele":2,"strokes":1,"sound":"yi"},  "刁":{"char":"刁","ele":1,"strokes":2,"sound":"diao"},  // ...}


五各吉凶数字库

数据格式用 ts 表示如下:

enum Sex {  female,  male,}
Array<{ desc: string; score: -2 | -1 | 0 | 1 | 2; // 吉正数;凶负数,处理的时候要剔除 sex?: Sex; // 部分吉凶只针对男性或女性,使用时会根据性别进行过滤 nums: number[];}>


eg:

[    {    "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.将结果数据进行友好性处理,生成文件。


贴一点核心代码片段,大家意思意思

  numData.nums.forEach((totalScore) => {    const earthScore = totalScore - surStks;    if (allGoodNums.includes(earthScore)) {      chars.forEach((secd) => {        const manScore = surStks + secd.strokes;        const lastRest = earthScore - secd.strokes;        if (          lastRest > 0 &&          secd.ele === eles[0] &&          allGoodNums.includes(manScore)        ) {          chars.forEach((last) => {            if (              lastRest === last.strokes &&              last.ele === eles[1]            ) {              const { cosmos, man, earth, outside, total } = getNameScore({                surnameData,                secondNameData: secd,                lastnameData: last,              });              const fiveRes = `总${total}人${man}地${earth}天${cosmos}外${outside}`;              result.push(                `${secd.char}${last.char}(${secd.sound},${last.sound}):${fiveRes}`              );            }          });        }      });    }  });

结语

可以看到,逻辑其实非常简单,实现成本也不大,一两天就能搞出来。

原文作者:IT枫斗者;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
大家好,我是枫哥,🌟阿里云技术专家、📝资深面试官、🌹Java跳蚤网课堂创始人。技术交流vx:itfdz666,拥有多年一线研发经验,曾就职过科大讯飞、美团网、平安等公司。看面试实战视频可以关注b站号:IT枫斗者–Java面试。需要看技术文章,可以关注CSDN:IT枫斗者。

注册时间:2020-05-13

  • 博文量
    183
  • 访问量
    81346