Levenshtein votre source


11

La distance d'édition de Levenshtein entre deux chaînes est le nombre minimum possible d'insertions, de suppressions ou de substitutions pour convertir un mot en un autre mot. Dans ce cas, chaque insertion, suppression et substitution a un coût de 1.

Par exemple, la distance entre rollet rollingest 3, car les suppressions coûtent 1, et nous devons supprimer 3 caractères. La distance entre tollet tallest 1, car les substitutions coûtent 1.

Volé à la question originale de Levenshtein

Votre tâche consiste à calculer la différence d'édition Levenshtein entre une chaîne d'entrée et votre source. Il s'agit de étiqueté , donc les quines de triche (par exemple, la lecture de votre code source) ne sont pas autorisées.

Règles

  • L'entrée sera non vide et sera composée d'ASCII, à moins que votre source ne contienne non ASCII, auquel cas l'entrée peut inclure Unicode. Quoi qu'il en soit, la distance Levenshtein sera mesurée en caractères, pas en octets.

  • La sortie est la distance d'édition Levenshtein minimale de l'entrée et de votre source.

C'est le , donc la réponse la plus courte, en octets, gagne.



8
J'allais suggérer de faire de la partition la sortie de votre programme lors de son exécution, mais j'ai réalisé ...
ETHproductions


@ETHproductions Comment avez-vous pensé à cela? o_o
Erik the Outgolfer

Retina est si près de gagner cela avec un programme vide ...
Leo

Réponses:



4

Python 2 , 278 258 octets

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

Essayez-le en ligne!

Ceci est juste le quine habituel en Python, mélangé avec l'algorithme Levenshtein de cette réponse . Notez que cela devient assez extrêmement lent (grâce à M. Xcoder: P).


Est-ce que cela fonctionne l(s%s,input())(pas sûr)?
M. Xcoder

0

JavaScript, 113 octets

Ceci est un quine valide .

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

Idée volée d'une autre réponse.


"Ceci est un quine valide" - en fait, je ne suis pas sûr qu'il y ait un consensus clair dans ce fil méta que vous avez lié. Et en fait, par quelques votes, l'option "c'est de la triche" est en train de gagner.
FlipTack
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.