用.NET写“算命”程序
算命”,是一种迷信,我父亲那一辈却执迷不悟,有时深陷其中,有时为求一“上上签”,甚至不惜重金,向“天神”保佑。我曾看到过有些算命网站,可以根据人的生辰八字,来求得这个人一生的财运、桃花运,如果第一卦算得不好,还可以向“天神”“请愿”(充钱),再算一卦,直到达到好运为止。
作为一个深信唯物辩证法的人来说,这些东西当然是不信。
但仔细口味,发现这些东西其中需要有些科学道理。我可以将算命
总结为以下“三要素”:
-
一致性
“命中注定”,因此“算”出来的东西,不管早算还是晚算,什么时候算,结果应该都一样。 -
无规律性
“天机不可泄露”,因此输入相近的姓名等参数,输出应该相差较远。“每个人的命运各不相同”,比如狗二和狗三,相差只有一个字,但他们的命运并不一定会几乎一样。算法应该也考虑这一点。
-
个性化
输入参数应该尽量个性化,不要像
十二生肖
/十二星座
那样,和性别
做排列组合,只有12x2=24
种结果。否则撞车的人太多,容易露馅😂。因此输入参数必须个性化,最好是姓名
、性别
再加上生辰八字
(出生时间)。 -
可操作性
孜孜不倦的求卦者,可能会“诚心诚意”想求个“上上签”,因此在一致性的基础上,必须要加一点点“可操作性”。这个可以当作一个单独的输入参数来表示。
如果将算命
当作一个函数,那它的输入无疑是姓名
、其它个人信息
和诚心
。,输出就是一个分数(0
-100
),可以用下图的代码表示:
int destinyScore = f(name, otherPersonalInformation, faith);
下面,我将用.NET
实现这个“算命”的功能。
最简单的“算命”程序
最初想法
如果只以姓名
作为输入,那么这个函数可以简化为:
int destinyScore = f(name);
这可能就好办多了,如.NET
中的.GetHashCode()
,即可快速获取一个字符串的哈希值,这个哈希值应该是固定的(吗?),该值的取值范围是int.MinValue
-int.MaxValue
。因此最简单的办法,可以先可以通过对100
求模,此时的取值范围是-99~99
;然后再取绝对值+1即可,代码如下:
int GetForturn(