Mã gần với thách thức: Khởi động


15

Đây là phần tiếp theo của thử thách này: Mã gần với thử thách: Tổng các số nguyên

Thử thách trong phần này khó hơn một chút và cũng tạo nên một tiêu đề hay (Đó là lý do tại sao tôi chọn nó):

Tính khoảng cách Levenshtein giữa hai chuỗi

Cũng giống như thử thách cuối cùng, điểm của bạn trong thử thách này là khoảng cách Levenshtein giữa mã của bạn và trích dẫn ở trên.

Vì vậy, bây giờ cho các chi tiết!

Chương trình của bạn sẽ có 2 đầu vào, cả hai chuỗi không có dấu cách hoặc dòng mới và sẽ xuất khoảng cách Levenshtein giữa chúng. Khoảng cách Levenshtien được định nghĩa là số lượng bổ sung, xóa và thay thế cần thiết để chuyển đổi một chuỗi thành một chuỗi khác. Để biết thêm thông tin về cách tính toán, hãy xem trang Wikipedia được liên kết ở trên. Để kiểm tra xem chương trình của bạn có hoạt động không, hãy sử dụng máy tính này . Chương trình của bạn không xuất ra gì ngoài khoảng cách Levenshtein giữa hai chuỗi. Nó sẽ bị loại nếu có bất cứ điều gì khác được đưa ra. Ví dụ I / O:

Inputs:
test
test2
Output:
1

Inputs:
222
515
Output:
3

Inputs:
Test
test
Output:
1

Mã của bạn có thể không có ý kiến ​​hay bình luận.

Câu trả lời:


9

Nháy mắt , khoảng cách 24

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

Để sử dụng điều này, bạn sẽ gọi Tính toán bằng hai chuỗi và vì điều này sẽ trở lại, bạn cũng cần phải bao quanh cuộc gọi với print[]. Nếu điều này không được phép, điểm của tôi là 30.

Thí dụ:

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

Bạn cần tải xuống Frink, vì trình thông dịch web không cho phép xác định chức năng. Nó nên chạy trên tất cả các hệ thống, coi đó là một applet Java. Tải về hướng dẫn tại đây. .


Thánh ca Chào! Đây là một triển khai Levenshtein trong Symbolic, một cái gì đó tôi đang làm việc : k=λ:Δ(ί,ί).


3
Ngôn ngữ thú vị, làm tôi nhớ đến Mathematica.
Alex A.

Điều này được tính là sử dụng chức năng tích hợp để giải quyết thách thức, có thể được coi là lỗ hổng tiêu chuẩn (nhưng dường như 90℅ tất cả các câu trả lời cho thử thách này)
John Dvorak

1
@JanDvorak Các phần dựng sẵn là một khu vực màu xám kể từ khi phân tích phiếu bầu trong danh sách câu trả lời meta được xây dựng như một lỗ hổng tiêu chuẩn là gần một nửa và một nửa.
Alex A.

5

R, khoảng cách 35

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

Điều này tạo ra một chức năng Calculatevới các tham số theLevenshtein. Nó sử dụng hàm tích hợp R adistđể tính khoảng cách. Các tham số chuỗi về adistcơ bản thevà được Levenshteinđổi tên thành betweentwo.


5

PHP4.1, khoảng cách 32 22 15 14

Rất cơ bản, không có gì thú vị.

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

Hoặc một phiên bản ngắn hơn:

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

Để làm việc này, bạn cần gửi / đặt biến POST / GET / COOKIE / phiên với các phím:

  • distance( istanceđối với cái ngắn hơn)
  • between_two_strings( etweentwostrinđối với cái ngắn hơn)

Các đối số theo thứ tự đó.

Kiểm tra điểm số trên http://ideone.com/QzNZ8T

Thí dụ:

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

@A UpperFire Xin lỗi, nhưng tôi không thể chấp nhận chỉnh sửa của bạn. Trích dẫn OP: "Your code may not have no-ops or comments."và chỉnh sửa của bạn chỉ cần thêm một nhận xét HTML.
Ismael Miguel

2

PHP, khoảng cách 44

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

Sử dụng hàm dựng sẵn levenshteintừ thư viện chuẩn PHP và đặt tên cho các đối số để cố gắng giảm thiểu khoảng cách.


1
Có nên không $two,$strings?
Ismael Miguel

thực sự, nó nên
永劫 回

1
Ngoài ra, bạn đang thiếu một;
Ismael Miguel

Tôi cung cấp cho bạn một giải pháp với khoảng cách 28:echo$Calculate_the=levenshtein($_GET[distance_between_two],$_GET[strings]);
Ismael Miguel

2

Pip, khoảng cách 50

Sử dụng không có chức năng Levenshtein dựng sẵn!

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

Mã này thực hiện thuật toán Levenshtein đệ quy ; như vậy, nó cực kỳ chậm, mất vài giây ngay cả đối với các chuỗi có độ dài 5. Tôi không khuyên bạn nên chạy chương trình thông qua chính nó để kiểm tra nó!

Đây là mã cơ sở của tôi, với khoảng trắng và nhận xét:

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

Thay đổi chính trong phiên bản cuối cùng là gán một số giá trị cho các biến tạm thời ce, xuất hiện trong chuỗi thử thách và do đó làm giảm khoảng cách Levenshtein một chút.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.