Khoảng cách Hamming nhỏ nhất đến một bảng màu có chứa một chuỗi con


17

Điều này được lấy cảm hứng từ một câu hỏi CS.SE hiện đã bị xóa .

Bài tập

Cho hai chuỗi đầu vào không trống A và B, xuất khoảng cách nhỏ nhất từ ​​A đến palindrom chứa B dưới dạng chuỗi con. Khoảng cách được xác định bởi số lần thay thế ký tự ( Khoảng cách Hamming ).

Những hạn chế

  • Đầu vào hợp lý: một palindrom tồn tại. Điều này có nghĩa là | A | ≥ | B |.
  • A và B chỉ chứa các ký tự ASCII thấp hơn, chữ thường và chữ hoa là khác biệt (như tất cả các ký tự khác).
  • Nếu ngôn ngữ của bạn không thể xử lý các ký tự ASCII, bạn cũng có thể sử dụng số nguyên (hoặc một số loại dữ liệu hợp lý khác) và bạn có thể chọn giới hạn phạm vi ở 128 yếu tố.
  • Bạn có thể lấy đầu vào từ stdin, đối số hàm, đối số dòng lệnh, v.v.
  • Bạn có thể đưa ra kết quả trên thiết bị xuất chuẩn, giá trị trả về, v.v.
  • Bạn không cần phải cung cấp một bảng màu làm việc, khoảng cách nhỏ nhất đến một là đủ.

Ví dụ

A                   B            Output
thilloaoyreot       hello        4 (thelloaolleht)
benjonson           stack        9 (stackcats)
neversaynever!      odd          9 (neveroddoreven)
ppcggcpp            gg           0 (ppcggcpp)
stars               tat          1 (stats)

Chấm điểm

Đây là mã golf, mã ngắn nhất tính bằng byte thắng.

Câu trả lời:


5

Bình thường, 19 byte

hSmsnVQd/#z_I#^+Qzl

Trình diễn

Phương pháp vũ phu cực đoan. Tạo tất cả các chuỗi có độ dài phù hợp với các ký tự trong một trong hai chuỗi, bộ lọc cho palindromes và để chứa đầu vào thứ hai, ánh xạ tới khoảng cách từ chuỗi đầu tiên, đầu ra nhỏ nhất.

Giải trình:

hSmsnVQd/#z_I#^+Qzl
hSmsnVQd/#z_I#^+QzlQ     Variable introduction
                         Q = string A, z = string B.
               +Qz       Concatenate A and B
              ^   lQ     Form every string of length equal to len(A)using
                         characters from the concatenation.
             #           Filter on
           _I            Invariance under reversal (palindrome)
         #               Filter on
        / z              Nonzero occurences of B
  m                      Map to
    nV                   !=, vectorized over
      Qd                 A and the map input
   s                     Sum (gives the hamming weight)
hS                       Min

Một cái gì đó như thế này là những gì tôi nghĩ, nhưng quyết định O ((m + n) ^ n) quá O (xấu). : D
PurkkaKoodari

3

Bình thường, 45 byte

hSmsnVQdf}zTsmm+hc2KsXcd+Bklz1z_hc2PKh-lQlz_B

Hãy thử trực tuyến. Bộ thử nghiệm.

Tôi vẫn chưa thực sự hài lòng với cách thức này. Nhưng ít nhất nó khá khó hiểu nếu không có lời giải thích. (Tôi đoán là thành công?)

Giải trình

  • Lấy trong A là Qvà B là z.
  • mMáy _BQtính toán sau đây cho cả A và ngược lại là d:
    • m... h-ldlzTính sau cho tất cả ktừ 0 đếnlen(A) - len(B) bao gồm:
      • +BklzLấy cặp k, k + len(B).
      • cdChia dtại các chỉ số.
      • X... 1zThay thế thứ hai (giữa) một phần với B.
      • KsNối các mảnh và lưu vào K. B được chèn tại vị trí ktrong A hoặc ngược lại.
      • hc2Chia chuỗi kết quả thành hai và giữ mảnh đầu tiên. Điều này cung cấp một nửa chuỗi với ký tự giữa có thể.
      • hc2PKLoại bỏ ký tự cuối cùng và thực hiện phân tách tương tự, giữ mảnh đầu tiên. Điều này cho một nửa chuỗi mà không có ký tự giữa có thể.
      • +... _Thêm ngược lại của mảnh ngắn hơn để các mảnh còn. Bây giờ chúng ta có một palindrom.
  • s Nối các kết quả cho A và ngược lại.
  • f}zT Xóa tất cả các chuỗi không chứa B.
  • mTính toán như sau cho tất cả các chuỗi kết quả d:
    • nVQd Lấy bất đẳng thức cặp với A. Điều này cho True cho các cặp cần thay đổi.
    • sTổng hợp danh sách. Điều này cho khoảng cách Hamming.
  • hS Lấy kết quả tối thiểu.

1

JavaScript (Firefox 30+), 152 146 byte

(A,B)=>Math.min(...[...Array(A[l='length']-B[l]+1)].map((_,i)=>[for(c of q=A.slice(j=t=0,i)+B+A.slice(i+B[l]))t+=(c!=A[j])+(c!=q[q[l]-++j])/2]|t))

Phương pháp tiếp cận lực lượng: tạo ra từng sự chồng chéo có thể có của A và B, biến chúng thành một bảng màu, tính khoảng cách Hamming từ A và lấy khoảng cách nhỏ nhất trong khoảng cách kết quả.

Có lẽ có thể chơi gôn thêm một chút ...

Kiểm tra đoạn

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.