Levenshtein您的来源


11

两个字符串之间的Levenshtein编辑距离是将一个单词转换为另一个单词的最小可能插入,删除或替换次数。在这种情况下,每次插入,删除和替换的成本均为1。

例如,之间的距离roll,并rolling为3,因为缺失花费1,我们需要删除3个字符。toll和之间的距离tall为1,因为替换的费用为1。

最初的Levenshtein问题被盗

您的任务是计算输入字符串和源之间的Levenshtein编辑差异。这是标记,所以作弊基内斯(例如,读你的源代码)都不会允许的。

规则

  • 输入将是非空的,并且将由ASCII组成,除非您的源包含非ASCII,在这种情况下,输入可能包含Unicode。无论如何,Levenshtein距离将以字符而不是字节为单位。

  • 输出是输入和源的最小Levenshtein编辑距离。

这是,因此最短答案(以字节为单位)获胜。



8
我会建议做的时候通过自身运行比分程序的输出,但后来我意识到...
ETHproductions


@ETHproductions您怎么想到了?o_o
越野选手埃里克(Erik the Outgolfer)'17

视网膜是如此接近用空程序赢得比赛……
Leo

Answers:



4

Python 2中278个 258字节

t=input();s,f='t=input();s,f=%r,lambda m,n:m or n if m*n<1else-~min(f(m-1,n),f(m,n-1),f(m-1,n-1)-((s%%s)[m-1]==t[n-1]));print f(len(s%%s),len(t))',lambda m,n:m or n if m*n<1else-~min(f(m-1,n),f(m,n-1),f(m-1,n-1)-((s%s)[m-1]==t[n-1]));print f(len(s%s),len(t))

在线尝试!

这只是Python中的常用方法,并结合了这个答案中的Levenshtein算法。请注意,它变得非常 非常(感谢Xcoder先生:P)慢。


这对l(s%s,input())(不确定)有用吗?
Xcoder先生17年

0

JavaScript,113字节

这是有效的奎因。

f=t=>[...t].map((v,j)=>x=x.map((w,k)=>q=k--?Math.min(q,w,x[k]-(v==u[k]))+1:j+1),x=[...[,...u=`f=${f}`].keys()])|q

f=t=>[...t].map((v,j)=>x=x.map((w,k)=>q=k--?Math.min(q,w,x[k]-(v==u[k]))+1:j+1),x=[...[,...u=`f=${f}`].keys()])|q

console.log(f('f=t=>[...t].map((v,j)=>x=x.map((w,k)=>q=k--?Math.min(q,w,x[k]-(v==u[k]))+1:j+1),x=[...[,...u=`f=${f}`].keys()])|q'));
console.log(f('%'));
console.log(f('12345'));

想法从其他答案中被盗。


“这是有效的方法”-实际上,我不确定您链接的元线程中是否有明确的共识。实际上,以几票赞成,“这是作弊”选项实际上是获胜的。
FlipTack
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.