duangsuse::Echo
584 subscribers
4.12K photos
118 videos
579 files
6.13K links
import this:
美而不丑、明而不暗、短而不凡、长而不乱,扁平不宽,读而后码,行之天下,勿托地上天国。
异常勿吞,难过勿过,叹一真理。效率是很重要,盲目最是低效。
简明是可靠的先验,不是可靠的祭品。
知其变,守其恒,为天下式;穷其变,知不穷,得地上势。知变守恒却穷变知新,我认真理,我不认真。

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
http://passer-by.com/relationship/ 丈母娘=老婆的妈妈 #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 的大佬都没能教会我 😢 扶不起