http://passer-by.com/relationship/
下次关系式实践就一定要弄这个,可以算过去可以推出来,非常实际,还能支持 ABCD 变量是最好的了
要是只支持一个方向多无聊, 父母儿女 兄弟姐妹 拿 Map fold 一下就解决了,可是关系式求解才有意思 🌝
好吧,为了证明这个问题(单向查称呼以及单层回溯)没意思我就举个 #Python #code
族谱关系只分长幼男女两种,究其根本也就是「亲孩 长幼(指同辈关系的)」四个字
这个东西稍微推广下,结果 list 化下,就能支持关系别名,或泛性别、泛长幼的查询 ,但是一点意思也没有 要做就做好玩又好学的😒
从一个拓扑图里导出任意两点的关系写出的应用最优雅,可惜我不会,有没有人能教会我…… 可是博文 hello declarative world 的大佬都没能教会我 😢 扶不起
丈母娘=老婆的妈妈
#relation #functonal 对!要的就是这个 🌚下次关系式实践就一定要弄这个,可以算过去可以推出来,非常实际,还能支持 ABCD 变量是最好的了
要是只支持一个方向多无聊, 父母儿女 兄弟姐妹 拿 Map fold 一下就解决了,可是关系式求解才有意思 🌝
好吧,为了证明这个问题(单向查称呼以及单层回溯)没意思我就举个 #Python #code
族谱关系只分长幼男女两种,究其根本也就是「亲孩 长幼(指同辈关系的)」四个字
relationCode = """下面的部分是湖北本地的叫法,当然这都是配置文件,能随便切换的。 😋
父 爸.; 母 妈.
儿 儿子; 女 女儿
兄 哥.; 弟 弟.
姐 姐.; 妹 妹.
妻 老婆; 夫 老公
妻父 岳父; 妻母 岳母
夫父 公.; 夫母 婆.
母母 姥姥; 母父 姥爷
父母 奶奶; 父父 爷爷
母姐 大姨; 母妹 小姨
母兄 大舅; 母弟 小舅
父兄 叔叔; 父弟 小叔叔
"""
def relativeData(code, sep=' '): op=lambda s:s.split(sep,maxsplit=1); return {kv[0]:re.sub('(.)\\.', "\\1\\1", kv[1]) for kv in map(op, re.split('''\s*[;\n]\s*''', code)) if len(kv)==2}
def mktrie(d, k_end=None):
def br(dd,kk): v=dd.get(kk); vd = v if isinstance(v,dict) else ({k_end:v} if v else {}); dd[kk]=vd; return vd
for kkz in (iter(k_:=k) for k in d if len(k) > 1):
v = d[k_]; d0 = d
for kk in kkz: d0 = br(d0, kk)
d0[k_end] = v
class bidir_map(dict):
def __init__(*arg): dict.__init__(*arg); o=arg[0];o._rev = {o[k]:k for k in o}
def keyOf(self, v): return self._rev.get(v)
def relDesc(s, use_short): # 父父=爸爸的爸爸(=爷爷)
if use_short: return sep.join(rels[k] for k in s)
path = rels; res = []
for i, ch in enumerate(s):
if ch not in path: raise ValueError(f"unknow {ch} in {repr(s[:i+1])} at {path}")
if (v:=path[ch][None]): res.append(v); path = rels
def rrelDesc(ss): return [rels.keyOf(s) or s for s in ss]
# ~女儿的妈=女母 (要检测自相等关系和有效性就必须明白性别什么的 很麻烦,但是机械执行就不需要算法
这个东西稍微推广下,结果 list 化下,就能支持关系别名,或泛性别、泛长幼的查询 ,但是一点意思也没有 要做就做好玩又好学的😒
从一个拓扑图里导出任意两点的关系写出的应用最优雅,可惜我不会,有没有人能教会我…… 可是博文 hello declarative world 的大佬都没能教会我 😢 扶不起
Passer-By
中国亲戚关系计算器 亲戚称谓计算器 亲戚称呼大全
中国亲戚关系计算器是一款最为全面准确的亲戚称呼计算器及亲戚关系在线查询工具,逢年过节走亲访友必备神器,亦可作为家庭启蒙教育应用。