Levenshtein Tu fuente


11

La distancia de edición de Levenshtein entre dos cadenas es el número mínimo posible de inserciones, eliminaciones o sustituciones para convertir una palabra en otra palabra. En este caso, cada inserción, eliminación y sustitución tiene un costo de 1.

Por ejemplo, la distancia entre rolly rollinges 3, porque las eliminaciones cuestan 1, y necesitamos eliminar 3 caracteres. La distancia entre tolly talles 1, porque las sustituciones cuestan 1.

Robado de la pregunta original de Levenshtein

Su tarea es calcular la diferencia de edición de Levenshtein entre una cadena de entrada y su fuente. Esto se etiqueta , por lo que no se permiten trampas quines (por ejemplo, leer su código fuente) .

Reglas

  • La entrada no estará vacía y estará compuesta de ASCII, a menos que su fuente contenga no ASCII, en cuyo caso la entrada puede incluir Unicode. En cualquier caso, la distancia de Levenshtein se medirá en caracteres, no en bytes.

  • La salida es la distancia mínima de edición de Levenshtein de la entrada y su fuente.

Este es el , por lo que la respuesta más corta, en bytes, gana.



8
Iba a sugerir hacer que la partitura sea la salida de su programa cuando se ejecuta por sí mismo, pero luego me di cuenta ...
ETHproductions


@ETHproductions ¿Cómo pensaste en eso? o_o
Erik the Outgolfer

Retina está tan cerca de ganar esto con un programa vacío ...
Leo

Respuestas:



4

Python 2 , 278 258 bytes

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

Pruébalo en línea!

Esta es solo la quine habitual en Python, mezclada con el algoritmo Levenshtein de esta respuesta . Tenga en cuenta que se pone muy muy (gracias al Sr. Xcoder: P) lento.


¿Funciona esto l(s%s,input())(no estoy seguro)?
Sr. Xcoder

0

JavaScript, 113 bytes

Esta es una quine válida .

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

Idea robada de otra respuesta.


"Esta es una cita válida" - en realidad, no estoy seguro de que haya un consenso claro en ese metahilo que vinculó. Y, de hecho, por unos pocos votos, la opción "esto es trampa" está ganando.
FlipTack
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.