Левенштейн, ваше джерело


11

Відстань редагування Левенштейна між двома рядками - це мінімально можлива кількість вставок, вилучень або підстановок для перетворення одного слова в інше слово. У цьому випадку кожна вставка, видалення та заміна має вартість 1.

Наприклад, відстань між rollі rollingстановить 3, тому що видалення коштує 1, а нам потрібно видалити 3 символи. Відстань між tollта tallдорівнює 1, оскільки заміна коштує 1.

Викрадено з оригінального питання Левенштейна

Ваше завдання - обчислити різницю в редагуванні Левенштейна між рядком введення та джерелом. Це мічений , тому обман quines (наприклад, читання вихідного коду) є НЕ допускається.

Правила

  • Вхід буде не порожнім і буде складатися з ASCII, якщо тільки ваше джерело не містить ASCII, і в цьому випадку вхід може включати Unicode. Незалежно, відстань Левенштейна буде вимірюватися символами, а не байтами.

  • Вихід - мінімальна відстань редагування Левенштайна вхідного сигналу та джерела.

Це , тому найкоротша відповідь у байтах виграє.



8
Я збирався запропонувати зробити бал результатом вашої програми, коли запускається через себе, але тоді я зрозумів ...
ETHproductions


@ETHproductions Як ви навіть про це думали? o_o
Erik the Outgolfer

Сітківка настільки близька, щоб перемогти це порожньою програмою ...
Лев

Відповіді:



4

Python 2 , 278 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

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.