Java识堂,一个高原创,高收藏,有干货的微信公众号,欢迎关注

春节到了,免不了要去七大姑八大姨家拜年,顺便接受长辈们的关怀。有时偶然遇到许久没见过的远房亲戚,叫不出合适的称谓就尴尬了;或者即便被家人提示了叫法,但依然不知道和自己是什么关系。

于是就有机智的程序员开发出了 亲戚关系计算器 ,可以通过指定关系的叠加,计算出互相之间的关系称谓,有的还可以通过称呼来倒推关系。这种工具网上已经有了不少版本,网页、App、微信小程序,都能搜到不少。不过讲真,考虑到实际中能遇上的复杂关系以及东西南北各地称呼不一样,其实算不上实用。

但对于程序员来说,解决问题本身就具有挑战的乐趣。

目前我看到比较好的版本是:

https://github.com/mumuy/relationship

演示地址:

http://passer-by.com/relationship/

小程序版本

这个问题看似简单,其实处理起来也并不是几行代码就能解决的。简单介绍下 mumuy 这个版本的原理:

  1. 定义最基本的原子关系,比如: f:父,m:母,h:夫,w:妻,s:子,d:女,xb:兄弟,ob:兄,lb:弟,xs:姐妹,os:姐,ls:妹
  2. 通过关系链,表示复合关系,比如:爷爷就是 f,f ,伯父就是 f,ob
  3. 讲前两点对应关系用字典的方式预先整理好,就是所有关系链到称谓的直接映射
  4. 定义可简化的关系,比如:哥哥的姐姐就是自己的姐姐,即 xb,xs 就是 xs ;母亲的丈夫 m,h 就是父亲 f 。这一步的作用是为了将复杂的关系链转化成可查找到的直接关系链
  5. 为了处理性别、长幼带来的影响,作者还额外定义了一些修饰符: 1:男性,0:女性,&o:年长,&l:年幼,#:隔断,[a|b]:并列
  6. 定义好以上信息好,当获取用户的输入后,将其转化成关系符号,再递归简化关系链,直到不可再简化为止,再去映射关系中查找称呼。

这个版本的算法是网上相对最完善的,并且被MIUI自带亲戚计算器功能所采用。

作者的详细解读:

https://www.jianshu.com/p/74290f1ae838

我本来也打算挑战一下,后来发现其实蛮复杂,估计等我写好,《难忘今宵》都唱完了,于是作罢。就在此版本的基础上,做了个 python 版本的移植(原版是 js)。

本来打算尝试用 jiphy 等自动工具来把 js 转成 python,结果发现效果差到不能看,所以最后是手动转的。原项目在文本和关系链处理时用了大量的正则计算,而我在转代码时也靠 SublimeText 的正则替换省了很多事。但同样是正则,js 和 python 的写法又有不少区别,可以说这个项目让我对 正则表达式 的熟练度又 +1 了。

python 版代码: https://gitee.com/crossin/snippet/tree/master/relationship

小编偷偷告诉你们其实微信上有很多计算亲戚关系的小程序,快去试试吧

原文地址:https://segmentfault.com/a/1190000018087611

js计算器代码加减乘除_理不清亲戚关系,程序员直接写了一个亲戚关系计算器,来试试?...相关推荐

  1. js计算器代码加减乘除_如何用jQuery做一个简易版计算器

    经过几个小时地敲敲打打,终于把这一部分的代码完成了. 这类问题的难点不在于布局,而是如何恰当地使用jQuery达成计算.交互的目的,比如储存.显示数值,数据类型的转换等. 在听老师讲课之前的我,思路是 ...

  2. java代码情书_一封来自Java程序员的情书

    一直以来程序员都给大家以高智商低情商,不懂得浪漫不会哄女生开心的形象.但是,我觉得程序员都是浪漫的.对于这种错误观念,只能用一首歌来表达广大程序员的心声:程序员的好,只有他身边的那个人才知道!!! 每 ...

  3. html网页加减乘除代码,html+js实现简单的计算器代码(加减乘除)

    html+js实现简单的计算器代码(加减乘除) function setOp(op, opTips) { var tb=document.getElementById("tb_calc&qu ...

  4. 静态html加减乘除计算器代码,html+js实现简单的计算器代码(加减乘除)

    下面小编就为大家带来一篇html+js实现简单的计算器代码(加减乘除).小编觉得挺不错的,现在就分享给大家,也给大家做个参考. html+js实现简单的计算器代码(加减乘除) function set ...

  5. 程序员离职原因的最佳回答_员工离职了还将公司的代码盗走做开发!还挖走程序员!...

    原标题:员工离职了还将公司的代码盗走做开发!还挖走程序员! 换工作是我们经常都会遇到的事情,大家离职的原因是大小不一的,最近长胜看到了一则新闻就是跟这个离职的有关的,看完之后只能说这个离职的小伙伴是个 ...

  6. JS实现Unix时间戳(Unix timestamp)转换工具-toolfk程序员工具网

    本文要推荐的[ToolFk]是一款程序员经常使用的线上免费测试工具箱,ToolFk 特色是专注于程序员日常的开发工具,不用安装任何软件,只要把内容贴上按一个执行按钮,就能获取到想要的内容结果.Tool ...

  7. 脸盲分不清公司的程序员,同事教我一招,果然好用

    差不多类型的衣服, 差不多类型的脸庞, 差不多的程序员, 码着差不多的代码. 差不多的时间 做着差不多的事情 差不多的工作 领着差不多的工资 差不多的世界 有着一群差不多的人. 差不多的我 看着差不多 ...

  8. float right不生效_【工具篇】程序员不愿意写 PPT 是姿势不对?

    | 好看请赞,养成习惯 你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If you can NOT explain it simply, you do NOT understand it ...

  9. 七夕情人节教你如何告白~html+css+js制作唯美满天星3D相册(含音乐)程序员520表白必备

    ❉ 七夕情人节教你如何告白~html+css+js制作唯美满天星3D相册(含音乐)程序员520表白必备 一年一度的/520情人节/七夕情人节/生日礼物/告白师妹/程序员表白,是不是要给女朋友或者正在追 ...

最新文章

  1. C++的STL 栈 实现四则运算
  2. 剑指offer 替换空格
  3. mysql查询表字段是否存在_Mysql判断表字段或索引是否存在
  4. Effective Java -- 思维导图
  5. Intellij IDEA搭建vue-cli项目
  6. DBSCAN聚类算法初探(五)
  7. AcWing 1056. 股票买卖 III
  8. wr885n虚拟服务器设置,动态IP设置:选择动态IP(以太网宽带
  9. 服装行业电子商务的概述
  10. 华为云GaussDB首次亮相2021服贸会,为数字人民币提供坚实数据底座
  11. Spark的lazy特性有什么意义呢?
  12. Android开发 Flash Ane创建和使用
  13. 关于python3的input函数和int()强制转换
  14. FFMEPG avs2 解码支持
  15. python怎么使用数据库系统有什么好处_数据库简单介绍
  16. NVIDIA Tesla GPU系列P4、T4、P40以及V100显卡性能的对比
  17. 电力电子器件篇之电阻
  18. Windows10或11 update服务禁用之后又变成手动
  19. 摆脱渣走位 新手进阶攻略:关于走砍
  20. MTK开机LOGO图片的显示原理

热门文章

  1. 【Day07】v-model 是如何实现的,语法糖实际是什么?
  2. 【静态站点(二)】之 Gridsome 基础
  3. 【Java】从键盘中输入一个值,在数组中查找该值的索引并输出
  4. 【Java】计算8+88+888+8888+....前12项的和
  5. 【JS】JavaScript复制内容到剪贴板
  6. jest.conf.js_如何在Jest中正确模拟Moment.js / dates
  7. 因为安全层不能与远程计算机协商兼容的参数,L2TP连接尝试失败,因为安全层在初始化与远程计算机的协商时遇到了一个处理错误(转)...
  8. 计算机考研英语词汇书,考研英语词汇参考书推荐
  9. popen 如何获取指令执行情况_Linux下使用popen()执行shell命令
  10. 每个开发人员都需要学Python?看看大佬是怎么说的!