某日,闲着蛋疼,正好老总正为公司起名发愁(要开分公司?谁知道),把我叫去,说:小黄,给你个艰巨而有伟大的任务,用Java写个为公司起名的工具出来,里面的详细规则要领一会我和你详解;有了它,哪天我们可以拿着它去路边插面旗摆个摊,我们就是半仙了,不愁混不到饭吃。
一:你未必听过的知识
接下来我学了不少没接触过的知识:
-
- 五行,金、木、水、火、土;这个倒听说。
- 汉字有五行属性,如‘才’属于金,‘干’属于木等。
- 81数理,即汉字的笔画数(繁体),1至81,各有寓意,九九归一,超过81的则用80取余。多个汉字的数理由各汉字的数理相加模80。
- 数理有凶有吉,吉的数理有1、3、5、6、7、8、11、13、15、16、17、18、21、23、24、31、32、33、35、37、41、45、47、48、52、57、61、65、67、68、73。
- 公司名一般由3个部分组成:前缀、主体部分、后缀组成,如北京**网络科技有限公司。
- 公司名中,主体部分的总数理要在吉数理内,前缀+主体部分的总数理要在吉数理内,主体部分+后缀部分的总数理要在吉数理内,整个公司名的总数理要在吉数理内。
- 公司名中的主体部分中的汉字要从木或火中取。
上面就是公司命名的要点,当然还包括其他方面,我的任务是把给定前缀和后缀的公司名中的所有满足条件的主体部分全部列举出来就行了,主体部分还支持通配符,如:轩易**。到这里,你脑海里里是否已经有方案了呢,不错,很简单嘛。上述的7个要点中,最重要的要数第3条和第7条了,第3条教你如何算汉字的数理,第7条指定了公司名的命名规则。当然,别忽略了第7条。
二:还需要什么
当然,光靠上面7条要点还无法实现。至少需要知道五行中各包含哪些汉字,五行中各笔画包含哪些汉字 ,就是说要有一个用于查询汉字属于哪行和多少笔画的字库。另外,命名的时候那些偏的,繁体的字体我们也不经常用把,就是说还需要一个用于命名的字库。这两个都没问题,老总有:
三:算法
- 根据前缀和后缀以及给定主体格式获得所有满足条件的主体部分的笔画数。
- 根据要起名的字数和满足条件的笔画数获得所有满足条件的笔画排列组合。
- 根据获得的笔画排列组合按笔画取汉字组成 主体部分 输出。
主要代码如下,至于当主体部分为任意多个汉字时一时想不到好的解决方案,索性用了个枚举,最多只能起5个汉字,再多就没意义了,你可以粗略算一下有多少种排列组合,程序要跑到猴年马月啊,还有你见那个公司名的主体部分有五六个字的:
程序运行结果: