レヴェンシュタイン・ユア・ソース


11

2つの文字列間のレーベンシュタイン編集距離は、1つの単語を別の単語に変換するための挿入、削除、または置換の可能な最小数です。この場合、挿入、削除、置換のコストはそれぞれ1です。

たとえば、削除のコストは1であるため、rollとの間の距離rollingは3であり、3文字を削除する必要があります。置換のコストは1であるため、tollとの間の距離はtall1です。

元のレーベンシュタインの質問から盗まれた

あなたの仕事は、入力文字列とソースの間のレーベンシュタイン編集の差異を計算することです。これは、タグ付きです(例えば、あなたのソースコードを読む)浮気quinesがされているので、ない許可します。

ルール

  • 入力が空ではなく、ASCIIで構成されます。ただし、ソースに非ASCIIが含まれている場合は、入力にUnicodeが含まれることがあります。とにかく、レーベンシュタイン距離はバイト単位ではなく文字単位で測定されます。

  • 出力は、入力とソースのレーベンシュタイン編集距離の最小値です。

これはなので、バイト単位の最短の回答が優先されます。



8
それ自体を実行するときにスコアをプログラムの出力にすることをお勧めしましたが、その後、私は気づきました
ETHproductions '


@ETHproductionsどう思いましたか?o_o
Erik the Outgolfer 2017

Retinaは空のプログラムでこれに勝っている...
Leo

回答:



4

Pythonの2278の 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の通常のクインであり、この回答のレーベンシュタインアルゴリズムと混合されています非常に 極端に遅くなることに注意してください(Xcoderさんのおかげで:P)。


これは機能しますかl(s%s,input())(わからない)?
Xcoder氏2017

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.