接近挑战的代码:开始


15

这是此挑战的续集:接近挑战的代码:整数和

这个挑战比较艰巨,而且标题也很酷(这就是我选择它的原因):

计算两个字符串之间的Levenshtein距离

就像上一个挑战一样,您在此挑战中的得分是代码与上面引号之间的Levenshtein距离

现在就来详细说明!

您的程序将接受2个输入,两个字符串都没有尾随空格或换行符,并将输出它们之间的Levenshtein距离。Levenshtien距离定义为将一个字符串转换为另一字符串所需的添加,删除和替换的数量。有关如何计算的更多信息,请参见上面链接的Wikipedia页面。要测试您的程序是否有效,请使用此计算器。您的程序只能输出两个字符串之间的Levenshtein距离。如果有其他输出,将被取消比赛资格。 I / O示例:

Inputs:
test
test2
Output:
1

Inputs:
222
515
Output:
3

Inputs:
Test
test
Output:
1

您的代码可能没有操作或注释。

Answers:


9

皱纹,距离24

Calculate[the,Levenshtein]:=editDistance[the,Levenshtein]

要使用此功能,您需要使用两个字符串调用Calculate,并且由于这是返回字符串,因此您还需要将调用括起来print[]。如果不允许这样做,我的分数是30。

例:

Calculate["kitten","spork"]        -> returns 6
print[Calculate["kitten","spork"]] -> prints 6.

您需要下载Frink,因为Web解释器不允许定义函数。考虑到它是Java小程序,它应该在所有系统上运行。在此处下载说明


Psst。嘿! 这是Symbolic中的Levenshtein实现,我正在从事以下工作:k=λ:Δ(ί,ί)


3
有趣的语言让我想起了Mathematica。
Alex A.

这可以算作是使用内置函数来解决挑战,可以将其视为标准漏洞(但是似乎可以解决所有挑战的90%)
John Dvorak

1
@JanDvorak内置类是一个灰色区域,因为将元答案列为内置漏洞的标准答案的投票细分几乎是一半。
Alex A.

5

R,距离35

Calculate=function(the,Levenshtein)adist(between<-the,two<-Levenshtein)

这将创建一个Calculate带有参数the和的函数Levenshtein。它使用R内置函数adist来计算距离。在字符串参数adist基本上theLevenshtein重命名为betweentwo


5

PHP4.1,距离 32 22 15 14

很基本的一个,没什么令人兴奋的。

<?=$Calculate_the=Levenshtein($distance,$between_two_strings);

或更短的版本:

<?=$ulatethe=Levenshtein($istance,$etweentwostrin);

为此,您需要使用以下键发送/设置POST / GET / COOKIE / session变量:

  • distanceistance较短的一个)
  • between_two_stringsetweentwostrin较短的一个)

参数按该顺序排列。

http://ideone.com/QzNZ8T上测试分数

例:

http://localhost/distance.php?distance=string1&between_two_strings=string2

@AboveFire抱歉,但是我不能接受您的编辑。引用OP:"Your code may not have no-ops or comments."并且您的编辑仅添加了HTML注释。
伊斯梅尔·米格尔

2

PHP,距离44

function Calculate($two,$strings){echo levenshtein($two,$strings);}

使用levenshteinPHP标准库中的内置函数并命名参数,以尝试最小化距离。


1
不是$two,$strings吗?
伊斯梅尔·米格尔

确实,应该。
永劫回帰2015年

1
另外,您还缺少;
Ismael Miguel

我为您提供距离为28的解决方案:echo$Calculate_the=levenshtein($_GET[distance_between_two],$_GET[strings]);
Ismael Miguel

2

点距50

不使用内置的Levenshtein函数!

xINg?#JgMN[1+(fac:b@>1)1+(fe:a@>1b)(a@0NEb@0)+(fec)]

该代码实现了递归Levenshtein算法 ; 因此,它非常慢,即使长度为5的字符串也要花费几秒钟。我不建议自己运行程序来检查它!

这是我的基本代码,带有空格和注释:

; Note: a Pip program is an implicit function f, which is called with the command-line
; arguments. The args are stored in the list g, as well as being assigned to the local
; variables a-e.

; Is one of the args the empty string? (NB x is initialized to "")
x IN g ?
 ; If so, join args together and take the length (i.e., length of the non-empty string).
 # J g
 ; If not, take the min of the following:
 MN [
  ; Recursively call f with the first character of a removed; add 1 to the result
  (f a@>1 b) + 1
  ; Recursively call f with the first character of b removed; add 1 to the result
  (f a b@>1) + 1
  ; Recursively call f with the first characters of both removed; iff the two characters
  ; were not equal, add 1 to the result
  (f a@>1 b@>1) + (a@0 NE b@0)
 ]

最终版本中的主要更改是为一些临时变量c和赋了一些值e,这些变量出现在质询字符串中,从而稍微减少了Levenshtein距离。

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.