Levenshtein Nguồn của bạn


11

Khoảng cách chỉnh sửa Levenshtein giữa hai chuỗi là số lần chèn, xóa hoặc thay thế tối thiểu có thể để chuyển đổi một từ thành một từ khác. Trong trường hợp này, mỗi lần chèn, xóa và thay thế có chi phí là 1.

Ví dụ: khoảng cách giữa rollrollinglà 3, vì việc xóa có giá 1 và chúng ta cần xóa 3 ký tự. Khoảng cách giữa tolltalllà 1, vì chi phí thay thế là 1.

Lấy cắp từ câu hỏi Levenshtein ban đầu

Nhiệm vụ của bạn là tính toán sự khác biệt chỉnh sửa Levenshtein giữa một chuỗi đầu vào và nguồn của bạn. Điều này được gắn thẻ , vì vậy các gian lận (ví dụ: đọc mã nguồn của bạn) không được phép.

Quy tắc

  • Đầu vào sẽ không trống và sẽ bao gồm ASCII, trừ khi nguồn của bạn chứa không phải ASCII, trong trường hợp đó, đầu vào có thể bao gồm Unicode. Bất kể, khoảng cách Levenshtein sẽ được đo bằng ký tự, không phải byte.

  • Đầu ra là khoảng cách chỉnh sửa Levenshtein tối thiểu của đầu vào và nguồn của bạn.

Đây là , vì vậy câu trả lời ngắn nhất, tính bằng byte, thắng.



8
Tôi sẽ đề nghị làm cho điểm số trở thành đầu ra của chương trình của bạn khi chạy qua chính nó, nhưng sau đó tôi nhận ra ...
Sản phẩm ETH


@ETHproductions Làm thế nào bạn thậm chí nghĩ về điều đó? o_o
Erik the Outgolfer 8/8/17

Retina rất gần với chiến thắng này với một chương trình trống ...
Leo

Câu trả lời:



4

Python 2 , 278 258 byte

t=input();s,f='t=input();s,f=%r,lambda m,n:m or n if m*n<1else-~min(f(m-1,n),f(m,n-1),f(m-1,n-1)-((s%%s)[m-1]==t[n-1]));print f(len(s%%s),len(t))',lambda m,n:m or n if m*n<1else-~min(f(m-1,n),f(m,n-1),f(m-1,n-1)-((s%s)[m-1]==t[n-1]));print f(len(s%s),len(t))

Hãy thử trực tuyến!

Đây chỉ là câu hỏi thường gặp trong Python, trộn lẫn với thuật toán Levenshtein từ câu trả lời này . Lưu ý rằng nó trở nên khá cực kỳ (nhờ ông Xcoder: P) chậm.


Điều này có làm việc cho l(s%s,input())(không chắc chắn)?
Ông Xcoder

0

JavaScript, 113 byte

Đây là một quine hợp lệ .

f=t=>[...t].map((v,j)=>x=x.map((w,k)=>q=k--?Math.min(q,w,x[k]-(v==u[k]))+1:j+1),x=[...[,...u=`f=${f}`].keys()])|q

f=t=>[...t].map((v,j)=>x=x.map((w,k)=>q=k--?Math.min(q,w,x[k]-(v==u[k]))+1:j+1),x=[...[,...u=`f=${f}`].keys()])|q

console.log(f('f=t=>[...t].map((v,j)=>x=x.map((w,k)=>q=k--?Math.min(q,w,x[k]-(v==u[k]))+1:j+1),x=[...[,...u=`f=${f}`].keys()])|q'));
console.log(f('%'));
console.log(f('12345'));

Ý tưởng bị đánh cắp từ câu trả lời khác.


"Đây là một câu hỏi hợp lệ" - thực sự, tôi không chắc có sự đồng thuận rõ ràng nào trong chuỗi meta mà bạn đã liên kết. Và trên thực tế, bằng một vài phiếu bầu, tùy chọn "đây là gian lận" thực sự chiến thắng.
FlipTack
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.