Code in der Nähe der Herausforderung: Inception

15

Dies ist eine Fortsetzung dieser Herausforderung: Code in der Nähe der Herausforderung: Summe der ganzen Zahlen

Die Herausforderung in diesem Spiel ist etwas schwieriger und sorgt auch für einen coolen Titel (weshalb ich ihn ausgewählt habe):

Berechnen Sie den Levenshtein-Abstand zwischen zwei Saiten

Genau wie bei der letzten Herausforderung ist Ihre Punktzahl bei dieser Herausforderung die Levenshtein-Distanz zwischen Ihrem Code und dem obigen Zitat.

Nun also zu den Details!

Ihr Programm verwendet zwei Eingaben, beide Zeichenfolgen ohne Leerzeichen oder Zeilenumbrüche, und gibt den Levenshtein-Abstand zwischen ihnen aus. Die Levenshtien-Entfernung ist definiert als die Anzahl von Hinzufügungen, Löschungen und Ersetzungen, die erforderlich sind, um eine Zeichenfolge in eine andere umzuwandeln. Weitere Informationen zur Berechnung finden Sie auf der oben verlinkten Wikipedia-Seite. Verwenden Sie diesen Taschenrechner , um zu testen, ob Ihr Programm funktioniert . Ihr Programm muss nur den Levenshtein-Abstand zwischen den beiden Strings ausgeben. Es wird disqualifiziert, wenn etwas anderes ausgegeben wird. Beispiel I / O:

Inputs:
test
test2
Output:
1

Inputs:
222
515
Output:
3

Inputs:
Test
test
Output:
1

Ihr Code enthält möglicherweise keine No-Ops oder Kommentare.

Gemeinschaft
quelle

Antworten:

9

Frink , Abstand 24

Calculate[the,Levenshtein]:=editDistance[the,Levenshtein]

Um dies zu verwenden, würden Sie Calculate mit den beiden Zeichenfolgen aufrufen, und da dies zurückkehrt, müssen Sie den Aufruf auch mit umgeben print[]. Wenn dies nicht erlaubt ist, ist meine Punktzahl 30.

Beispiel:

Calculate["kitten","spork"]        -> returns 6
print[Calculate["kitten","spork"]] -> prints 6.

Sie müssen Frink herunterladen, da der Webinterpreter das Definieren von Funktionen nicht zulässt. Es sollte auf allen Systemen ausgeführt werden, wenn man bedenkt, dass es sich um ein Java-Applet handelt. Anleitung hier herunterladen . .


Psst. Hallo! Hier ist eine Levenshtein Implementierung in Symbolic, etwas arbeite ich an: k=λ:Δ(ί,ί).

Kade
quelle
3
Interessante Sprache, erinnert mich an Mathematica.
Alex A.
Dies gilt als Verwendung einer integrierten Funktion zur Lösung der Herausforderung, die als Standardlücke betrachtet werden könnte (aber anscheinend 90℅ aller Antworten auf diese Herausforderung)
John Dvorak
1
@JanDvorak Built-Ins sind eine Art Grauzone, da die Abstimmungsaufschlüsselung in der Meta-Antwort-Liste der Built-Ins als Standard-Regelungslücke beinahe halb so hoch ist.
Alex A.
5

R, Abstand 35

Calculate=function(the,Levenshtein)adist(between<-the,two<-Levenshtein)

Dadurch wird eine Funktion Calculatemit den Parametern theund erstellt Levenshtein. Es verwendet die integrierte R-Funktion adist, um die Entfernung zu berechnen. Die String - Parameter in adistim Wesentlichen theund Levenshteinumbenannt betweenund two.

Alex A.
quelle
5

PHP4.1, Entfernung 32 22 15 14

Sehr einfach, nichts Aufregendes.

<?=$Calculate_the=Levenshtein($distance,$between_two_strings);

Oder eine kürzere Version:

<?=$ulatethe=Levenshtein($istance,$etweentwostrin);

Damit dies funktioniert, müssen Sie eine POST / GET / COOKIE / Session-Variable mit den folgenden Tasten senden / setzen:

  • distance( istancefür die kürzere)
  • between_two_strings( etweentwostrinfür die kürzere)

Die Argumente sind in dieser Reihenfolge.

Testen Sie die Punktzahl auf http://ideone.com/QzNZ8T

Beispiel:

http://localhost/distance.php?distance=string1&between_two_strings=string2
Ismael Miguel
quelle
@AboveFire Entschuldigung, aber ich kann Ihre Bearbeitung nicht akzeptieren. Zitiere das OP: "Your code may not have no-ops or comments."und deine Bearbeitung fügte einfach einen HTML-Kommentar hinzu.
Ismael Miguel
2

PHP, Abstand 44

function Calculate($two,$strings){echo levenshtein($two,$strings);}

Verwenden Sie die integrierte levenshteinFunktion aus der PHP-Standardbibliothek und benennen Sie die Argumente, um zu versuchen, die Entfernung zu minimieren.

永劫 永劫 回
quelle
1
Sollte es nicht sein $two,$strings?
Ismael Miguel
in der Tat sollte es.
永劫 永劫 帰
1
Außerdem fehlt Ihnen ein;
Ismael Miguel
Ich biete Ihnen eine Lösung mit einer Entfernung von 28:echo$Calculate_the=levenshtein($_GET[distance_between_two],$_GET[strings]);
Ismael Miguel
2

Pip, Abstand 50

Verwendet keine eingebaute Levenshtein-Funktion!

xINg?#JgMN[1+(fac:b@>1)1+(fe:a@>1b)(a@0NEb@0)+(fec)]

Dieser Code implementiert den rekursiven Levenshtein-Algorithmus . Aus diesem Grund ist es extrem langsam und benötigt auch für Zeichenfolgen der Länge 5 einige Sekunden. Ich würde nicht empfehlen, das Programm selbst auszuführen, um es zu überprüfen!

Hier ist mein Basiscode mit Leerzeichen und Kommentaren:

; Note: a Pip program is an implicit function f, which is called with the command-line
; arguments. The args are stored in the list g, as well as being assigned to the local
; variables a-e.

; Is one of the args the empty string? (NB x is initialized to "")
x IN g ?
 ; If so, join args together and take the length (i.e., length of the non-empty string).
 # J g
 ; If not, take the min of the following:
 MN [
  ; Recursively call f with the first character of a removed; add 1 to the result
  (f a@>1 b) + 1
  ; Recursively call f with the first character of b removed; add 1 to the result
  (f a b@>1) + 1
  ; Recursively call f with the first characters of both removed; iff the two characters
  ; were not equal, add 1 to the result
  (f a@>1 b@>1) + (a@0 NE b@0)
 ]

Die wichtigste Änderung in der endgültigen Version ist die Zuweisung einiger Werte zu temporären Variablen cund e, die im Challenge-String erscheinen und damit den Levenshtein-Abstand etwas verringern.

DLosc
quelle