春节到了,免不了要去七大姑八大姨家拜年,顺便接受长辈们的关怀。有时偶然遇到许久没见过的远房亲个人戚,叫不出合适的称谓就尴尬了;或者即便被家人提示了叫法,但依然不知道和自己是什么关系。
但对于程序员来说,解决问题本身就具有挑战的乐趣。
目前我看到比较好的版本是:
http计算器s://github.com/mumuy/relationship
工资演示地址:
http://passer-by.com/relationship/
小程序版本
这个问题看似简单,其实处理起来也并不是几行代码就能解决的。简单介绍下 mumuy算 这个版本的原理:
- 定义最基本的原子关系,比如: f:父,m:母,h:夫,w:妻,s:子,d:女,xb:兄弟,ob:兄,lb:弟,xs:姐妹,os:姐,ls:妹
- 通过关系链,表示复合关系反推,比如:爷爷就是 f,f ,伯父就是 f,ob
- 讲前两点对应关系用字典的方式预先整理好,就是所有关系链到称谓的直接映射
- 定义可简化的关系,比如:哥哥的姐姐就是自己的姐怎么姐,即 xb,xs 就是 xs ;母亲的丈夫 m,h 就是父亲 f 。这一步的作用是为了将复杂的关系链转化成可查找到的计算器直接关系链
- 为了处理性别、长幼带来的影响,作者还额外定义了一些修饰符: 1:男性,0:女性,&a税mp;o:年长,&l:年幼,#:隔断,[a|b]:并列
- 定义好以上信息好,当获取用户的输入后,将其转化成关系符号,再递归简化关系链,直到不可再简化为止,再去映射关系中查找称呼。
这个版本的算法是网上相对最完善的,并且被MIUI自带亲戚计算器功能所采用。
作者的详细解读:
https://www.j算ianshu.com/p/74290f1ae838
所得税我本来怎么也打算挑战一下,后来发现其实蛮复杂,估计等我写好,《难忘今宵》都唱完了,于是作工资罢。就在此版本的基础上,做了个 py个人thon 版本的移植(原版是 js)。
所得税本来打算尝试用 jiphy 等自动工具来把 js 转成 python,结果发现效果差到不能看,所以最后是手动转的。原项目在文本和税关系链处理时用了大量的正则计算,而我在转代码时也靠 SublimeText 的正则替换省了很多事。但同样是正则,js 和 python 的写法又有不少区别,可以说这个项目让我对 正则表达式 的熟练度又 1 了。
python 版代码: https://gitee.com/crossi反推n/snippet/tree/master/relationship
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至123456@qq.com 举报,一经查实,本站将立刻删除。