Левенштейн Ваш источник


11

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

Например, расстояние между rollи rollingравно 3, потому что удаление стоит 1, а нам нужно удалить 3 символа. Расстояние между tollи tallравно 1, потому что замены стоят 1.

Украденный из оригинального вопроса Левенштейна

Ваша задача - вычислить разницу редактирования Левенштейна между входной строкой и вашим источником. Это меченый , поэтому обман quines (например, чтение исходного кода) является не допускается.

правила

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

  • Выход - это минимальное расстояние редактирования Левенштейна для входа и вашего источника.

Это , поэтому самый короткий ответ, в байтах, выигрывает.



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


@ETHproductions Как ты вообще об этом думал? о_о
Эрик 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.