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.

Stephen
fuente
Sandbox
Stephen
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:

5

Python 2 + sequtils , 101 bytes

from sequtils import*;_='from sequtils import*;_=%r;print edit(_%%_,input())';print edit(_%_,input())
Erik el Outgolfer
fuente
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.

totalmente humano
fuente
¿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.


fuente
"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