Kode dekat dengan tantangan: Inception

15

Ini adalah sekuel dari tantangan ini: Kode yang dekat dengan tantangan: Jumlah bilangan bulat

Tantangan dalam yang ini sedikit lebih sulit, dan juga membuat judul yang keren (Itulah sebabnya saya mengambilnya):

Hitung jarak Levenshtein antara dua string

Sama seperti tantangan terakhir, skor Anda dalam tantangan ini adalah jarak Levenshtein antara kode Anda dan kutipan di atas.

Jadi sekarang untuk detailnya!

Program Anda akan mengambil 2 input, baik string tanpa spasi tambahan atau baris baru, dan akan menampilkan jarak Levenshtein di antara mereka. Jarak Levenshtien didefinisikan sebagai jumlah penambahan, penghapusan, dan penggantian yang diperlukan untuk mengubah satu string ke string lainnya. Untuk informasi lebih lanjut tentang cara menghitungnya, lihat halaman Wikipedia yang tertaut di atas. Untuk menguji apakah program Anda berfungsi, gunakan kalkulator ini . Program Anda harus menampilkan apa pun kecuali jarak Levenshtein antara kedua string. Itu akan didiskualifikasi jika hal lain dikeluarkan. Contoh I / O:

Inputs:
test
test2
Output:
1

Inputs:
222
515
Output:
3

Inputs:
Test
test
Output:
1

Kode Anda mungkin tidak memiliki no-ops atau komentar.

Komunitas
sumber

Jawaban:

9

Frink , jarak 24

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

Untuk menggunakan ini, Anda akan memanggil Hitung dengan dua string, dan karena ini kembali, Anda juga perlu mengelilingi panggilan dengan print[]. Jika ini tidak diizinkan, skor saya adalah 30.

Contoh:

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

Anda perlu mengunduh Frink, karena penerjemah web tidak mengizinkan fungsi pendefinisian. Ini harus dijalankan pada semua sistem, mengingat itu adalah applet Java. Unduh petunjuk di sini. .


Psst. Hei! Berikut adalah implementasi Levenshtein di simbolis, sesuatu yang saya kerjakan: k=λ:Δ(ί,ί).

Kade
sumber
3
Bahasa yang menarik, mengingatkan saya pada Mathematica.
Alex A.
Ini dianggap sebagai menggunakan fungsi bawaan untuk menyelesaikan tantangan, yang dapat dianggap sebagai celah standar (tapi sepertinya 90℅ dari semua jawaban untuk tantangan ini)
John Dvorak
1
@JanDvorak Built-in adalah jenis area abu-abu sejak pemecahan suara pada meta answer yang mendaftarkan built-in sebagai celah standar hampir setengah dan setengah.
Alex A.
5

R, jarak 35

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

Ini menciptakan fungsi Calculatedengan parameter thedan Levenshtein. Menggunakan fungsi adistbawaan R untuk menghitung jarak. Parameter string pada adistdasarnya thedan Levenshteindiubah namanya menjadi betweendan two.

Alex A.
sumber
5

PHP4.1, jarak 32 22 15 14

Yang sangat mendasar, tidak ada yang menarik.

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

Atau versi yang lebih pendek:

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

Agar ini berfungsi, Anda perlu mengirim / mengatur variabel POST / GET / COOKIE / sesi dengan tombol:

  • distance( istanceuntuk yang lebih pendek)
  • between_two_strings( etweentwostrinuntuk yang lebih pendek)

Argumennya dalam urutan itu.

Uji skor di http://ideone.com/QzNZ8T

Contoh:

http://localhost/distance.php?distance=string1&between_two_strings=string2
Ismael Miguel
sumber
@AboveFire Maaf, tapi saya tidak bisa menerima hasil edit Anda. Mengutip OP: "Your code may not have no-ops or comments."dan hasil edit Anda cukup menambahkan komentar HTML.
Ismael Miguel
2

PHP, jarak 44

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

Gunakan levenshteinfungsi bawaan dari perpustakaan standar PHP dan beri nama argumen untuk mencoba meminimalkan jarak.

永劫 回 帰
sumber
1
Bukankah seharusnya begitu $two,$strings?
Ismael Miguel
memang seharusnya begitu.
永劫 回 帰
1
Juga, Anda kehilangan;
Ismael Miguel
Saya menawarkan Anda solusi dengan jarak 28:echo$Calculate_the=levenshtein($_GET[distance_between_two],$_GET[strings]);
Ismael Miguel
2

Pip, jarak 50

Tidak menggunakan fungsi Levenshtein bawaan!

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

Kode ini mengimplementasikan algoritma Levenshtein rekursif ; karena itu, ini sangat lambat, butuh beberapa detik bahkan untuk rangkaian panjang 5. Saya tidak akan merekomendasikan menjalankan program sendiri untuk memeriksanya!

Inilah kode dasar saya, dengan spasi dan komentar:

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

Perubahan utama dalam versi final adalah menetapkan beberapa nilai ke variabel sementara cdan e, yang muncul dalam string tantangan dan dengan demikian mengurangi jarak Levenshtein sedikit.

DLosc
sumber