도전에 가까운 코드 : 시작


15

이것은 도전에 대한 속편입니다 : 도전에 가까운 코드 : 정수의 합

이것에 대한 도전은 조금 더 어려우며 멋진 타이틀을 만듭니다 (내가 그것을 선택한 이유는 무엇입니까).

두 줄 사이의 레 벤슈 테인 거리 계산

마지막 도전과 마찬가지로이 도전에서 얻은 점수는 레 벤슈 테인 거리입니다 코드와 위의 견적 사이 입니다.

자세한 내용은 지금!

프로그램은 후행 공백이나 줄 바꿈이없는 두 개의 입력을 취하고 그 사이의 레 벤슈 테인 거리를 출력합니다. Levenshtien 거리는 한 문자열을 다른 문자열로 변환하는 데 필요한 추가, 삭제 및 대체 수로 정의됩니다. 계산 방법에 대한 자세한 내용은 위에 링크 된 Wikipedia 페이지를 참조하십시오. 프로그램이 작동하는지 테스트하려면 이 계산기를 사용 하십시오 . 프로그램은 두 문자열 사이의 Levenshtein 거리 만 출력해야합니다. 다른 것이 출력되면 실격 처리됩니다. 예제 I / O :

Inputs:
test
test2
Output:
1

Inputs:
222
515
Output:
3

Inputs:
Test
test
Output:
1

코드에 운영 체제 나 의견이 없을 수 있습니다.

답변:


9

프 링크 , 거리 (24)

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

이를 사용하려면 두 문자열로 Calculate를 호출하고 이것이 반환되므로 호출을에 둘러싸 야합니다 print[]. 이것이 허용되지 않으면 내 점수는 30입니다.

예:

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

웹 인터프리터가 함수 정의를 허용하지 않으므로 Frink를 다운로드해야합니다. Java 애플릿을 고려하여 모든 시스템에서 실행해야합니다. 여기에서 지침을 다운로드 하십시오. .


Psst. 야! Symbolic의 Levenshtein 구현은 다음과 같습니다 k=λ:Δ(ί,ί).


3
재미있는 언어는 Mathematica를 생각 나게합니다.
Alex A.

내장 기능 표준 허점으로 간주 될 수있는 문제를 해결 (하지만 그래서이 문제에 대한 모든 답변의 90℅하는 것)을 사용하는 등이 카운트
존 드보락

1
@JanDvorak 빌트인은 표준 허점으로 빌트인 메타 답변 목록에 대한 투표 내역이 절반에 가깝기 때문에 일종의 회색 영역입니다.
Alex A.

5

거리 R

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

Calculate매개 변수 the및 로 함수 를 작성합니다 Levenshtein. R 내장 기능 adist을 사용하여 거리를 계산합니다. 의 문자열 매개 변수 adist는 기본적 the으로 Levenshtein이름이 between및 로 바뀝니다 two.


5

PHP4.1, 거리 32 22 15 14

매우 기본적인 것, 흥미로운 것은 없습니다.

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

또는 더 짧은 버전 :

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

이 기능을 사용하려면 다음 키를 사용하여 POST / GET / COOKIE / session 변수를 보내거나 설정해야합니다.

  • distance( istance짧은 것)
  • between_two_strings( etweentwostrin짧은 것)

인수는 순서대로 있습니다.

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 주석이 추가되었습니다.
Ismael Miguel

2

PHP, 거리 44

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

levenshtein거리를 최소화하기 위해 PHP 표준 라이브러리 의 내장 함수를 사용하고 인수의 이름을 지정하십시오.


1
그렇지 $two,$strings않습니까?
Ismael Miguel

실제로, 그것은해야합니다.
永劫 回 帰

1
또한, 당신은;
Ismael Miguel

나는 당신에게 28 거리의 솔루션을 제공합니다 :echo$Calculate_the=levenshtein($_GET[distance_between_two],$_GET[strings]);
Ismael Miguel

2

핍, 거리 50

내장 된 레 벤슈 테인 기능을 사용하지 않습니다!

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 거리를 약간 줄입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.