Kaynağınızı Levenshtein


11

İki dize arasındaki Levenshtein düzenleme mesafesi , bir kelimeyi başka bir kelimeye dönüştürmek için mümkün olan minimum ekleme, silme veya ikame sayısıdır. Bu durumda, her yerleştirme, silme ve değiştirmenin maliyeti 1'dir.

Örneğin, uzaktan arasında rollve rolling, 3'tür silme maliyeti 1 ve biz 3 karakterleri silmek gerekir çünkü. Arasındaki mesafe tollve tallikameler 1 maliyeti nedeniyle, 1'dir.

Orijinal Levenshtein sorusundan çalındı

Göreviniz bir giriş dizesi ile kaynağınız arasındaki Levenshtein düzenleme farkını hesaplamaktır. Bu etiketli bilgiler eder, bu yüzden (kaynak kodu okuma, örneğin) quines hile değil izin verdi.

kurallar

  • Kaynağınız ASCII dışı değilse, giriş boş olmayacak ve ASCII'den oluşacaktır; bu durumda giriş Unicode içerebilir. Ne olursa olsun, Levenshtein mesafesi bayt değil, karakter cinsinden ölçülecektir.

  • Çıktı, girdinin ve kaynağınızın minimum Levenshtein düzenleme mesafesidir.

Bu , çok kısa cevap, bayt olarak kazanır.



8
Kendi içinden geçtiğinde puanınızı programınızın çıktısını yapmayı önerecektim, ama sonra fark ettim ...
ETHproductions


@ETHproductions Bunu nasıl düşündün? o_o
Erik Outgolfer

Retina boş bir programla bunu kazanmaya çok yakın ...
Leo

Yanıtlar:



4

Python 2 , 278258 bayt

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

Çevrimiçi deneyin!

Bu, Python'daki bu olağan alıntıdır ve bu cevaptan Levenshtein algoritması ile karıştırılmıştır . O aldığını Not oldukça aşırı yavaş: (P Sn Xcoder sayesinde).


Bu işe yarıyor mu l(s%s,input())(emin değil misiniz)?
Bay Xcoder

0

JavaScript, 113 bayt

Bu geçerli bir soru.

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

Fikir diğer cevaptan çalındı.


"Bu geçerli bir soru" - aslında, bağladığınız meta iş parçacığında net bir fikir birliği olduğundan emin değilim. Ve aslında, birkaç oyla, "bu hile yapıyor" seçeneği aslında kazanıyor.
FlipTack
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.