改变词是一种游戏,你试图通过单一字符编辑把一个词变成另一个字,每一步都是它自己的词。对于此挑战,编辑可以是替换、插入或删除。例如,胜利者→输家可以使用此路径(可能还有其他):
WINNER
DINNER
DINER
DINE
LINE
LONE
LOSE
LOSER另一种说法是,你必须能够从另一个单词到达另一个单词,每次只有1的Levenshtein距离。
您将获得一个单词列表和两个单词,如果存在路由,则必须输出一个从一个字到另一个字的有效路由,如果不存在路由,则必须输出一个不同的常量值或一致行为。
发布于 2019-04-27 20:28:57
发布于 2019-04-27 21:36:09
f=lambda a,b,W,r=[]:a==b and r+[a]or reduce(lambda q,w:q or any({a,a[:i]+a[i+1:]}&{w,w[:i]+w[i+1:]}for i in range(len(a+w)))and f(w,b,W-{a},r+[a]),W-{a},0)将两个单词和一组单词作为输入;如果以字符串列表的形式存在,则返回(非最佳)路由,否则返回False。
这一片段:
any({a,a[:i]+a[i+1:]}&{w,w[:i]+w[i+1:]}for i in range(len(a+w)))是True当且仅当a==w或a有1与w之间的Levenshtein距离。
发布于 2019-04-26 23:55:34
Join[#,Select[Flatten[Permutations/@Subsets@#3,1],s=#;t=#2;Union[EditDistance@@@Partition[Join[s,#,t],2,1]]=={1}&][[1]],#2]&https://codegolf.stackexchange.com/questions/184841
复制相似问题