Levenshtein La tua fonte


11

La distanza di modifica di Levenshtein tra due stringhe è il numero minimo possibile di inserzioni, eliminazioni o sostituzioni per convertire una parola in un'altra parola. In questo caso, ogni inserimento, cancellazione e sostituzione ha un costo di 1.

Ad esempio, la distanza tra rolle rollingè 3, poiché le eliminazioni costano 1 e dobbiamo eliminare 3 caratteri. La distanza tra tolle tallè 1, poiché le sostituzioni costano 1.

Rubato dalla domanda originale di Levenshtein

Il tuo compito è calcolare la differenza di modifica di Levenshtein tra una stringa di input e la tua sorgente. Questo è etichettato , quindi barare quines (ad esempio, la lettura del codice sorgente) sono non consentito .

Regole

  • L'input sarà non vuoto e sarà composto da ASCII, a meno che la sorgente non contenga ASCII, nel qual caso l'input potrebbe includere Unicode. Indipendentemente da ciò, la distanza di Levenshtein verrà misurata in caratteri, non in byte.

  • L'output è la distanza minima di modifica di Levenshtein dell'input e della sorgente.

Questo è , quindi la risposta più breve, in byte, vince.



8
Stavo per suggerire di rendere il punteggio l'output del tuo programma quando eseguito attraverso se stesso, ma poi ho capito ...
ETHproductions


@ETHproductions Come ci hai pensato? o_o
Erik the Outgolfer

Retina è così vicina a vincere questo con un programma vuoto ...
Leone

Risposte:



4

Python 2 , 278 258 byte

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

Provalo online!

Questo è solo il solito quine in Python, mescolato con l'algoritmo di Levenshtein da questa risposta . Nota che ottiene abbastanza estremamente (grazie a Mr. Xcoder: P) lento.


Funziona per l(s%s,input())(non sono sicuro)?
Mr. Xcoder

0

JavaScript, 113 byte

Questo è un quine valido .

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 rubata da un'altra risposta.


"Questo è un quine valido" - in realtà, non sono sicuro che ci sia un chiaro consenso in quel meta thread che hai collegato. E in effetti, con pochi voti, l'opzione "Questo è barare" sta effettivamente vincendo.
FlipTack,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.