레 벤슈 테인 소스


11

두 문자열 사이의 Levenshtein 편집 거리는 한 단어를 다른 단어로 변환하기위한 가능한 최소 삽입, 삭제 또는 대체 수입니다. 이 경우 각 삽입, 삭제 및 대체 비용은 1입니다.

예를 들어, 삭제 비용이 1이고 3자를 삭제해야하기 때문에 roll와 사이의 거리는 rolling3입니다. 대체 비용이 1이기 때문에 toll와 사이의 거리는 tall1입니다.

원래 레 벤슈 테인 문제에서 도난

당신의 임무는 입력 문자열과 소스 간의 Levenshtein 편집 차이를 계산하는 것입니다. 이 태그입니다 , 그렇게된다 (소스 코드를 읽고, 예를 들어) quines을 부정 하지 있었습니다.

규칙

  • 소스에 비 ASCII가 포함되어 있지 않으면 입력이 비어 있지 않고 ASCII로 구성됩니다.이 경우 입력에 유니 코드가 포함될 수 있습니다. 그럼에도 불구하고 레 벤슈 테인 거리는 바이트가 아닌 문자로 측정됩니다.

  • 출력은 입력과 소스의 최소 Levenshtein 편집 거리입니다.

이것은 이므로 가장 짧은 대답은 바이트 단위입니다.



8
나는 스스로를 통해 실행될 때 당신의 프로그램의 결과를 점수로 만들 것을 제안하려고했지만, 나는 깨달았다 ...
ETHproductions


@ETHproductions 어떻게 생각하셨습니까? o_o
Outgolfer Erik

Retina는 빈 프로그램으로 이기고 있습니다 ...
Leo

답변:



4

파이썬 2 , 278258 바이트

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))

온라인으로 사용해보십시오!

이것은 파이썬에서 일반적인 quine 이며이 답변 의 Levenshtein 알고리즘과 혼합되었습니다 . 그것을 얻을 수 있습니다 매우 매우 느린 (P 씨 Xcoder 덕분에).


이것이 l(s%s,input())확실하지 않은가?
Mr. Xcoder

0

자바 스크립트, 113 바이트

이것은 유효한 quine입니다.

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'));

다른 답변에서 도난당한 아이디어.


"이것은 유효한 quine입니다"-실제로, 나는 당신이 연결 한 메타 스레드에 명확한 합의가 있는지 확실하지 않습니다. 사실, 몇 표로 "이것은 부정 행위입니다"옵션이 실제로이기는 것입니다.
FlipTack
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.