Codice vicino alla sfida: Inception


15

Questo è il seguito di questa sfida: Codice vicino alla sfida: Somma di numeri interi

La sfida in questo è un po 'più difficile e rende anche un titolo interessante (motivo per cui l'ho scelto):

Calcola la distanza di Levenshtein tra due stringhe

Proprio come l'ultima sfida, il tuo punteggio in questa sfida è la distanza di Levenshtein tra il tuo codice e la citazione sopra.

Quindi ora per i dettagli!

Il tuo programma prenderà 2 input, entrambe le stringhe senza spazi finali o newline, e produrrà la distanza di Levenshtein tra di loro. La distanza Levenshtien è definita come il numero di aggiunte, cancellazioni e sostituzioni necessarie per trasformare una stringa in un'altra. Per ulteriori informazioni su come calcolarlo, consultare la pagina Wikipedia collegata sopra. Per verificare se il programma funziona, utilizzare questa calcolatrice . Il tuo programma non deve produrre altro che la distanza di Levenshtein tra le due stringhe. Sarà squalificato se viene emesso qualcos'altro. Esempio I / O:

Inputs:
test
test2
Output:
1

Inputs:
222
515
Output:
3

Inputs:
Test
test
Output:
1

Il tuo codice potrebbe non avere operazioni o commenti.

Risposte:


9

Frink , distanza 24

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

Per usarlo, dovresti chiamare Calcola con le due stringhe e poiché questo sta tornando, devi anche circondare la chiamata print[]. Se ciò non è consentito, il mio punteggio è 30.

Esempio:

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

Devi scaricare Frink, poiché l'interprete web non consente di definire le funzioni. Dovrebbe funzionare su tutti i sistemi, considerando che è un'applet Java. Scarica le istruzioni qui. .


Psst. Hey! Ecco un'implementazione Levenshtein nel simbolico, qualcosa su cui sto lavorando: k=λ:Δ(ί,ί).


3
Linguaggio interessante, mi ricorda Mathematica.
Alex A.

Ciò conta come l'utilizzo di una funzione integrata per risolvere la sfida, che potrebbe essere considerata una scappatoia standard (ma così sembra 90℅ di tutte le risposte a questa sfida)
John Dvorak,

1
@JanDvorak Gli built-in sono una specie di area grigia poiché la suddivisione del voto nella meta-risposta che elenca gli built-in come scappatoia standard è quasi metà e metà.
Alex A.

5

R, distanza 35

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

Questo crea una funzione Calculatecon parametri thee Levenshtein. Utilizza la funzione integrata R adistper calcolare la distanza. I parametri della stringa in adistsono essenzialmente thee Levenshteinrinominati in betweene two.


5

PHP4.1, distanza 32 22 15 14

Molto semplice, niente di eccitante.

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

O una versione più breve:

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

Perché ciò funzioni, devi inviare / impostare una variabile POST / GET / COOKIE / session con i tasti:

  • distance( istanceper quello più corto)
  • between_two_strings( etweentwostrinper quello più corto)

Gli argomenti sono in questo ordine.

Prova il punteggio su http://ideone.com/QzNZ8T

Esempio:

http://localhost/distance.php?distance=string1&between_two_strings=string2

@AboveFire Siamo spiacenti, ma non posso accettare la tua modifica. Citando l'OP: "Your code may not have no-ops or comments."e la tua modifica ha semplicemente aggiunto un commento HTML.
Ismael Miguel,

2

PHP, distanza 44

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

Utilizzare la levenshteinfunzione integrata dalla libreria standard PHP e denominare gli argomenti per cercare di ridurre al minimo la distanza.


1
Non dovrebbe essere $two,$strings?
Ismael Miguel,

anzi, dovrebbe.
永劫 回 帰

1
Inoltre, ti manca un;
Ismael Miguel il

Ti offro una soluzione con una distanza di 28:echo$Calculate_the=levenshtein($_GET[distance_between_two],$_GET[strings]);
Ismael Miguel

2

Pip, distanza 50

Non utilizza la funzione Levenshtein integrata!

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

Questo codice implementa l'algoritmo ricorsivo di Levenshtein ; come tale, è estremamente lento, impiegando alcuni secondi anche per stringhe di lunghezza 5. Non consiglierei di eseguire il programma da solo per controllarlo!

Ecco il mio codice di base, con spazi bianchi e commenti:

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

La principale modifica nella versione finale è l'assegnazione di alcuni valori alle variabili temporanee c e e, che compaiono nella stringa di sfida e riducono così un po 'la distanza di Levenshtein.

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.