duangsuse::Echo
def singleCharDict(pairs: str): assert len(pairs) % 2 == 0, "unpaired" ks, vs = map(lambda i0: [pairs[i] for i in range(i0, len(pairs), 2)], [0, 1]) return dict(zip(ks, vs)) greekSimilar = singleCharDict("lιyγnηkκxχwω"+"PΡTΤYΥIΙHΗTΓZΖXΧBΒNΝMΜ") gre…
>>> mapLongInputBy(huoxin)
def siηgιeCharDict(pairs: str):>>> mapLongInputBy(huoxinBack)
assert ιeη(pairs) % 2 == 0, "μηpaired"
κs, vs = map(ιambda i0: [pairs[i] fσr i iη raηge(i0, ιeη(pairs), 2)], [0, 1])
retυrη dict(zip(κs, vs))
greeκSimiιar = siηgιeCharDict("ιιγγηηκκχχωω"+"ΡΡΓΤΥΥΙΙΗΗΓΓΖΖΧΧΒΒΝΝΜΜ")
greeκSimiιar.μpdate({'σ': "οθσ", 'μ': "υμ", 'Σ': "ΕΣΞ", 'Ω': "ΘΟΩ", 'Δ': "ΑΔΛ"})
frοm raηdοm impοrt chοice
def ιet(σp, χ): retυrη οp(χ) if χ != Νοηe eιse Νθηe
def hυσχiη(teχt):
chars = [ ιet(chθice, greeκSimiιar.get(c)) σr c fοr c iη teχt ]
retυrη "".jθiη(chars)
def singleCharDict(pairs: str):"自举"了(开个玩笑,定义不正确) 😂 #Python #Haha #tools
assert len(pairs) % 2 == 0, "unpaired"
ks, vs = map(lambda i0: [pairs[i] for i in range(i0, len(pairs), 2)], [0, 1])
return dict(zip(ks, vs))
greekSimilar = singleCharDict("llyynnkkxxww"+"PPTΤYYIIHHTTZZXXBBNNMM")
greekSimilar.update({'o': "ooo", 'u': "uu", 'E': "EEE", 'O': "OOO", 'A': "AAA"})
from random import choice
def let(op, x): return op(x) if x != None else None
def huoxin(text):
chars = [ let(choice, greekSimilar.get(c)) or c for c in text ]
return "".join(chars)
Forwarded from dnaugsuz
哦,弱密码穷举爬虫? ……
而且编写质量还贼烂,
而且编写质量还贼烂,
"".join(range(0, 9)) 没被定为变量、本来直接 sys.exit() 的非得 global is_exit,infinity loop 里 while 不用 True 还用 1Forwarded from dnaugsuz
放到 web 安全界,绝对会被当成脚本小子
建议不要使用,去找合适的工具(而且这种爆破成功机会有多少……都拦着弱密码了)
建议不要使用,去找合适的工具(而且这种爆破成功机会有多少……都拦着弱密码了)
Forwarded from dnaugsuz
顺便提一句,千万别 for c0 in xs: for c1 in xs: 要写就写一个更 general 的 generator 出来:
def flatten2(*iters):
for iter in iters:
for item in iter:
yield item
def combinations(xs, n):
if n == 1: return xs
return map(lambda x: flatten2(iter([x]), combinations(xs[1:], n -1)), xs) 啊好蠢我写不出来(那就写一个非 lazy 版的
def combinations(xs):
if len(xs) == 1: return xs
return [[x] + combinations(xs[1:]) for x in xs] 草好像写不出来了 🤪
太艹了,居然这都不会写…… 🤪
[[1, [2, [3]], [3, [2]]], [2, [1, [3]], [3, [1]]], [3, [1, [2]], [2, [1]]]] 也不对…… a*b 吗……
还是不对…… 其实这个是要
好了,我终于记起来最开始是咋组织的程序了……
啊……不对,我想起来了,之前处理的数据结构是
def combinations(xs);
return flatMap(lambda x0: [x0+], xs)
……我真是服了,list set 都不是 iter、iter 又没有 copy,算了就此为止吧
def combinations(items: set):
return [[item] + combinations(items - set([item])) for item in items] [[1, [2, [3]], [3, [2]]], [2, [1, [3]], [3, [1]]], [3, [1, [2]], [2, [1]]]] 也不对…… a*b 吗……
def combinations(xs):
return [ [x]+combinations(xs[1:]) for x in xs ] if len(xs) != 0 else [] 还是不对…… 其实这个是要
flatMap 的from itertools import chain
def flatMap(f, xs):
return f(xs[0]) if len(xs) == 1 else chain(f(xs[0]), flatMap(f, xs[1:])) list(flatMap(lambda c: [c, c.upper()], "abc")) == ['a', 'A', 'b', 'B', 'c', 'C']好了,我终于记起来最开始是咋组织的程序了……
啊……不对,我想起来了,之前处理的数据结构是
[a, [b1, b2], [c1, c2]] …… 这次的有点区别,不过实际上可以一样处理return flatMap(lambda x0: [x0+], xs)
def subtractSet(set, item):
newSet = set.copy(); newSet.remove(item)
return newSet
def flatMap(f, xs: iter):
try: return chain(f(next(xs)), flatMap(f, xs)) except StopIteration: return []
list(flatMap(lambda a: [a,a+1], iter([1,2,3]))) == [1, 2, 2, 3, 3, 4]def combinations(items: set):
return flatMap(lambda item: [item, combinations( subtractSet(items, item) )], items) ……我真是服了,list set 都不是 iter、iter 又没有 copy,算了就此为止吧
duangsuse::Echo
好像不擅长逻辑…… 那我枚举敷衍下好了 假定 A 是恒真,不,我是说下面我会把恒真的人称为 A 问 B,A 会告诉我某条是生路,关于结果是否为生路,分支: f(B) t(A), positive -> 假 negative -> 假 永远得假,不能分辨出正确结果 t(B) f(A), positive -> 假 negative -> 假 永远得假,不能分辨出谁是 A where t(p) 代表命题成立、f(p) 代表命题不成立 组合就是这些,二者中至少有一个真话所以没必要为…
今天早上起来我又想到了一种方法,好像解决问题了,给大家讲一下。
解:问A「如果我问B,他会说你的是真话,异或(logical xor) 左边的路是生路」
若真,左边的路是死路;否则右边的路是死路。
“他会说你的是真话” 和 “他会说你的是假话” 都一样,结果也无二 (不,应该是正好相反),我不讲这个了。
基本思路就两个:
1. 两个人,一个真话一个假话;任何的 logical negation 和反套命题到另一边都是没有意义的,做不到区分
我不知道这和 (&&) (||) (!) 以及 (=) 有什么关系,但看起来没法直接靠单层提问分出真假
比如,问「你是诚实的?」,
除非断言某个条件是真的,但这需要以第一个子问题是假的为代价提问
“如果我问另一人,他会说你的是真话”
A(B(way))
A(not B(way)) 不对,我的表达思路有点问题…… 算了不设计符号表达方式了,太菜
如果你问诚实者,“撒谎者会说你在说谎”,肯定
如果你问撒谎者,“诚实者会说你在说谎”,否定 🤔(WIP:错的?那好像依然不可判定啊……)(不对,撒谎者会把诚实者的断言再 negate 一遍,所以逻辑正确)
关于这个“撒谎”与否的问题,可以在保证两者定义(一个断言恒成立、一个断言恒为假)的同时,达到区分二者的目的
仅仅问关于 way 的断言,是不行的。
2. 等我们知道了谁是诚实的人,再利用子问题同时把关于路的判断“编码”进第一个提问,取回来
当然我们问的问题只能是「是否问题」,所以信息量比较有限,我们来看看:
需要注意的是,这里的等号 (=) 是一个双向关系(commutative relation),你可以从左边推到右边,也可以倒着推回来。
(或者说,下面等号的语义实际是数学上的 <=> )
有 p (这是谎话)、q (左边的路是生路),
logical and:
T && T = T
T && F = F
F && T = F
F && F = F
若答案为F,无法分辨出 q=F 时是不是真话。
(T && F) 真相是 (neg way),与 (F && F) 的真相 (way) 在确定上是冲突的
logical or:
T && T = T
T && F = T
F && T = T
F && F = F
若答案为T,结论同上无法分辨。
(T && T) ; (neg way) 和 (F && T) ; (way) 是冲突的
logical not:
!T = F
!F = T
刚才咱已经说了,不可能仅靠一元关系解决
logical xor:
T ^ T = F
T ^ F = T
F ^ T = T
F ^ F = F
这个就比较有意思了,因为最后的结论不会冲突,我们来看看。
F = 假话&生路 | 真话&死路
T 的情况是重点,因为它看起来像和 and/or 的情况差不多,但 T/F 和 F/T 实际上是一样的!
T = 假话&死路 | 真话&生路
所以得到否定答案可以确定那不是生路,肯定答案可以确定那是生路!
这个文,感觉什么「肯定」「断言」「确定」「消极」「T/F」用得比较没规范…… 请海涵。
解:问A「如果我问B,他会说你的是真话,异或(logical xor) 左边的路是生路」
若真,左边的路是死路;否则右边的路是死路。
“他会说你的是真话” 和 “他会说你的是假话” 都一样,
基本思路就两个:
1. 两个人,一个真话一个假话;任何的 logical negation 和反套命题到另一边都是没有意义的,做不到区分
我不知道这和 (&&) (||) (!) 以及 (=) 有什么关系,但看起来没法直接靠单层提问分出真假
比如,问「你是诚实的?」,
map(A(it) neg B(it), cases),事实上没法挑出撒谎的人,问「你说的是谎话?」也一样。除非断言某个条件是真的,但这需要以第一个子问题是假的为代价提问
variable A, B : Predicate然后思考一下怎么让 A 变成 truth(p), B 变成 falsely(p) 🤔
variable way : Bool
given {
A(p) => not B(p)
B(p) => not A(p) //至少有一个是“真话”
}
“如果我问另一人,他会说你的是真话”
A(B(way))
A(not B(way)) 不对,我的表达思路有点问题…… 算了不设计符号表达方式了,太菜
如果你问诚实者,“撒谎者会说你在说谎”,肯定
如果你问撒谎者,“诚实者会说你在说谎”,否定 🤔(WIP:错的?那好像依然不可判定啊……)(不对,撒谎者会把诚实者的断言再 negate 一遍,所以逻辑正确)
关于这个“撒谎”与否的问题,可以在保证两者定义(一个断言恒成立、一个断言恒为假)的同时,达到区分二者的目的
仅仅问关于 way 的断言,是不行的。
2. 等我们知道了谁是诚实的人,再利用子问题同时把关于路的判断“编码”进第一个提问,取回来
当然我们问的问题只能是「是否问题」,所以信息量比较有限,我们来看看:
需要注意的是,这里的等号 (=) 是一个双向关系(commutative relation),你可以从左边推到右边,也可以倒着推回来。
(或者说,下面等号的语义实际是数学上的 <=> )
有 p (这是谎话)、q (左边的路是生路),
logical and:
T && T = T
T && F = F
F && T = F
F && F = F
若答案为F,无法分辨出 q=F 时是不是真话。
(T && F) 真相是 (neg way),与 (F && F) 的真相 (way) 在确定上是冲突的
logical or:
T && T = T
T && F = T
F && T = T
F && F = F
若答案为T,结论同上无法分辨。
(T && T) ; (neg way) 和 (F && T) ; (way) 是冲突的
logical not:
!T = F
!F = T
刚才咱已经说了,不可能仅靠一元关系解决
logical xor:
T ^ T = F
T ^ F = T
F ^ T = T
F ^ F = F
这个就比较有意思了,因为最后的结论不会冲突,我们来看看。
F = 假话&生路 | 真话&死路
T 的情况是重点,因为它看起来像和 and/or 的情况差不多,但 T/F 和 F/T 实际上是一样的!
T = 假话&死路 | 真话&生路
所以得到否定答案可以确定那不是生路,肯定答案可以确定那是生路!
这个文,感觉什么「肯定」「断言」「确定」「消极」「T/F」用得比较没规范…… 请海涵。
𝔽𝕣𝕠𝕤𝕥
会,则正确的路是右,否则是左边
这个答案感觉应该也是对的,所以这个问题实际上很简单
关于生路在左边“是真的”,
B撒谎、A诚实,生路在右边
B诚实、A撒谎,生路在右边
所以“串联”在表述上是对的,只不过后面的文字看起来不太严谨
……不对啊
关于生路在右边“是真的”,
B撒谎、A诚实,生路在左边
B诚实、A撒谎,生路在左边
依然没法区分啊!不对…… 可以区分 🙈
🤔 这算是区分开了?……! 要不然你想怎么区分
关于生路在左边“是真的”,
B撒谎、A诚实,生路在右边
B诚实、A撒谎,生路在右边
所以“串联”在表述上是对的,只不过后面的文字看起来不太严谨
……不对啊
关于生路在右边“是真的”,
B撒谎、A诚实,生路在左边
B诚实、A撒谎,生路在左边
依然没法区分啊!不对…… 可以区分 🙈
def honest(p: bool): return p
def cheat(p: bool): return not p
def wayProblem(is_right: bool, a=honest, b=cheat):
return (a(is_right), b(is_right))
bools = [True, False]
[wayProblem(p) for p in bools] == [(True, False), (False, True)]
def compose(f, g): return lambda x: f(g(x))
[wayProblem(p, a=compose(honest, cheat), b=compose(cheat, honest)) for p in bools] == [(False, False), (True, True)] 🤔 这算是区分开了
Forwarded from duangsuse Throws
#life 建议从电脑桌上下来休息的人 采取下蹲 / 把小腿压在不太高的桌子上 的方式 舒展身体
个人感觉效果还可以,从别人分享的 PDF 上看到的。
个人感觉效果还可以,从别人分享的 PDF 上看到的。
https://www.barretlee.com/blog/2019/12/17/the-value-of-expression/ #dev #tech
作者: Barret李靖 2019-12-17 13:25:00 本文发布时间为2019年12月17日13时25分00秒 分类: 随笔 标签: 领英行家 下面是正文内容 评论数: 0 热度: 280
领英中国近期推出了一个年度行家的榜单,关注我的朋友可能知道,我有幸入了榜。
领英对行家的定义是,在自己的领域中,根据自身经验和知识,为他人答疑解惑,分享行业洞察,提供经验干货。简单来说,所谓的行家,就是善于思考,乐于发声的人。
作者: Barret李靖 2019-12-17 13:25:00 本文发布时间为2019年12月17日13时25分00秒 分类: 随笔 标签: 领英行家 下面是正文内容 评论数: 0 热度: 280
领英中国近期推出了一个年度行家的榜单,关注我的朋友可能知道,我有幸入了榜。
领英对行家的定义是,在自己的领域中,根据自身经验和知识,为他人答疑解惑,分享行业洞察,提供经验干货。简单来说,所谓的行家,就是善于思考,乐于发声的人。
浅谈价值表达
浅谈价值表达 | 小胡子哥的个人网站
还记得刚踏入职场时,最大的困惑是不清楚未来的成长路径是怎样的,在职场上,我的未来是什么?未来的路该怎么走?业界的那些大牛,到底有多牛?我离他们有多远?对此完全没有概念。
duangsuse::Echo
下去散步的时候想了一下 ParserKt 的 LayoutPattern 处理可选的 layout 的问题,感觉有点复杂 所谓可选的 layout,就是: if p: op() #无 if p: #有 op1() op2() 和带不带花括号的区分方式处理上差别不太大,都是判 1 字符。 ParserKt 里限制非常大,因为是严格的 peek(1),没法预判 不过对于 if,可以定义这种 Pattern<Char, AST> 。 LayoutPattern 是基于 item / tail…
#ParserKt 关于这个可选的 LayoutPattern,也的确是一个保留问题 🤔
不过现在可以设计一个关系式求解器了?
不过现在可以设计一个关系式求解器了?