Code proche du défi: Inception

15

Voici une suite à ce challenge: Code proche du challenge: Somme des entiers

Le défi dans celui-ci est un peu plus difficile, et crée également un titre sympa (c'est pourquoi je l'ai choisi):

Calculez la distance Levenshtein entre deux chaînes

Tout comme le dernier défi, votre score dans ce défi est la distance de Levenshtein entre votre code et la citation ci-dessus.

Alors maintenant pour les détails!

Votre programme prendra 2 entrées, les deux chaînes sans espaces de fin ni sauts de ligne, et affichera la distance Levenshtein entre elles. La distance de Levenshtien est définie comme le nombre d'ajouts, de suppressions et de substitutions nécessaires pour transformer une chaîne en une autre. Pour plus d'informations sur la façon de le calculer, consultez la page Wikipedia liée ci-dessus. Pour tester si votre programme fonctionne, utilisez cette calculatrice . Votre programme ne doit produire que la distance Levenshtein entre les deux chaînes. Il sera disqualifié si autre chose est sorti. Exemple d'E / S:

Inputs:
test
test2
Output:
1

Inputs:
222
515
Output:
3

Inputs:
Test
test
Output:
1

Votre code peut ne pas contenir d'opérations ou de commentaires.

Communauté
la source

Réponses:

9

Frink , distance 24

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

Pour utiliser cela, vous appelez calculer avec les deux chaînes, et puisque cela revient, vous devez également entourer l'appel avec print[]. Si cela n'est pas autorisé, mon score est de 30.

Exemple:

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

Vous devez télécharger Frink, car l'interpréteur Web ne permet pas de définir des fonctions. Il devrait fonctionner sur tous les systèmes, étant donné qu'il s'agit d'une applet Java. Téléchargez les instructions ici. .


Psst. Hey! Voici une implémentation Levenshtein dans symbolique, quelque chose que je travaille sur: k=λ:Δ(ί,ί).

Kade
la source
3
Langage intéressant, me rappelle Mathematica.
Alex A.
Cela compte comme l'utilisation d'une fonction intégrée pour résoudre le défi, qui pourrait être considéré comme une échappatoire standard (mais semble donc à 90℅ de toutes les réponses à ce défi)
John Dvorak
1
@JanDvorak Built-ins est une sorte de zone grise puisque la répartition des votes sur la méta-réponse répertoriant les intégrés comme échappatoire standard est proche de la moitié.
Alex A.
5

R, distance 35

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

Cela crée une fonction Calculateavec des paramètres theet Levenshtein. Il utilise la fonction intégrée R adistpour calculer la distance. Les paramètres de chaîne dans adistsont essentiellement theet Levenshteinrenommés en betweenet two.

Alex A.
la source
5

PHP4.1, distance 32 22 15 14

Très basique, rien d'excitant.

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

Ou une version plus courte:

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

Pour que cela fonctionne, vous devez envoyer / définir une variable POST / GET / COOKIE / session avec les touches:

  • distance( istancepour le plus court)
  • between_two_strings( etweentwostrinpour le plus court)

Les arguments sont dans cet ordre.

Testez le score sur http://ideone.com/QzNZ8T

Exemple:

http://localhost/distance.php?distance=string1&between_two_strings=string2
Ismael Miguel
la source
@AboveFire Désolé, mais je ne peux pas accepter votre modification. Citant l'OP: "Your code may not have no-ops or comments."et votre modification a simplement ajouté un commentaire HTML.
Ismael Miguel
2

PHP, distance 44

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

Utilisez la levenshteinfonction intégrée de la bibliothèque standard PHP et nommez les arguments afin d'essayer de minimiser la distance.

永劫 回 帰
la source
1
N'est-ce pas $two,$strings?
Ismael Miguel
en effet, il le devrait.
永劫 回 帰
1
Aussi, il vous manque un;
Ismael Miguel
Je vous propose une solution avec une distance de 28:echo$Calculate_the=levenshtein($_GET[distance_between_two],$_GET[strings]);
Ismael Miguel
2

Pip, distance 50

N'utilise aucune fonction Levenshtein intégrée!

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

Ce code implémente l'algorithme récursif de Levenshtein ; en tant que tel, il est extrêmement lent, prenant quelques secondes même pour des chaînes de longueur 5. Je ne recommanderais pas d'exécuter le programme lui-même pour le vérifier!

Voici mon code de base, avec des espaces et des commentaires:

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

Le principal changement dans la version finale est l'attribution de certaines valeurs aux variables temporaires cet e, qui apparaissent dans la chaîne de défi et réduisent ainsi un peu la distance Levenshtein.

DLosc
la source