Levenshtein Ihre Quelle


11

Der Levenshtein-Bearbeitungsabstand zwischen zwei Zeichenfolgen ist die minimal mögliche Anzahl von Einfügungen, Löschungen oder Ersetzungen, um ein Wort in ein anderes Wort umzuwandeln. In diesem Fall kostet jedes Einfügen, Löschen und Ersetzen 1.

Zum Beispiel beträgt der Abstand zwischen rollund rolling3, da Löschungen 1 kosten und wir 3 Zeichen löschen müssen. Der Abstand zwischen tollund tallbeträgt 1, da Substitutionen 1 kosten.

Aus der ursprünglichen Levenshtein-Frage gestohlen

Ihre Aufgabe ist es, die Levenshtein-Bearbeitungsdifferenz zwischen einer Eingabezeichenfolge und Ihrer Quelle zu berechnen. Dies ist als , daher ist das Betrügen von Quines (z. B. Lesen Ihres Quellcodes) nicht zulässig.

Regeln

  • Die Eingabe ist nicht leer und besteht aus ASCII, es sei denn, Ihre Quelle enthält Nicht-ASCII. In diesem Fall kann die Eingabe Unicode enthalten. Unabhängig davon wird der Levenshtein-Abstand in Zeichen und nicht in Bytes gemessen.

  • Die Ausgabe ist der minimale Levenshtein-Bearbeitungsabstand zwischen der Eingabe und Ihrer Quelle.

Dies ist , also gewinnt die kürzeste Antwort in Bytes.



8
Ich wollte vorschlagen, die Partitur zur Ausgabe Ihres Programms zu machen, wenn sie durch sich selbst läuft, aber dann wurde mir klar ...
ETHproductions


@ETHproductions Wie haben Sie überhaupt daran gedacht? o_o
Erik der Outgolfer

Retina ist so nah dran, dies mit einem leeren Programm zu gewinnen ...
Leo

Antworten:



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

Probieren Sie es online aus!

Dies ist nur das übliche Quine in Python, gemischt mit dem Levenshtein-Algorithmus aus dieser Antwort . Beachten Sie, dass es wird ganz extrem (Dank an Herrn Xcoder: P) langsam.


Funktioniert das für l(s%s,input())(nicht sicher)?
Mr. Xcoder

0

JavaScript, 113 Bytes

Dies ist eine gültige Quine.

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

Idee aus anderer Antwort gestohlen.


"Dies ist eine gültige Quine" - eigentlich bin ich mir nicht sicher, ob es in diesem Meta-Thread, den Sie verlinkt haben, einen klaren Konsens gibt. Und tatsächlich gewinnt mit ein paar Stimmen die Option "Dies ist Betrug" tatsächlich.
FlipTack
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.