Làm thế nào tương thích là chuỗi của tôi?


12

Giới thiệu

Xét hai chuỗi AB có cùng độ dài L và số nguyên K 0 . Đối với mục đích của thử thách này, chúng tôi nói rằng các chuỗi tương thích với K , nếu tồn tại một chuỗi C có độ dài K sao cho A là một chuỗi con liền kề của BCB nối . Lưu ý rằng A là chuỗi con của BAB , vì vậy AB luôn tương thích L (nhưng cũng có thể tương thích K với một số K <L khác ).

Đầu vào

Đầu vào của bạn là hai chuỗi có cùng độ dài dương, bao gồm các chữ cái ASCII viết hoa và viết thường.

Đầu ra

Đầu ra của bạn sẽ là số nguyên không âm thấp nhất K sao cho các đầu vào tương thích với K.

Thí dụ

Xem xét các đầu vào

A = HHHHHH
B = HHttHH

Chúng không tương thích 0, vì A không phải là chuỗi con của HHttHHHHttHH. Chúng cũng không tương thích 1, vì A không phải là một chuỗi con cho HHttHH#HHttHHdù chữ cái nào được đặt trên #. Tuy nhiên, A một chuỗi con của HHttHHHHHHttHH, trong đó C là chuỗi hai chữ cái HH. Do đó, các đầu vào là tương thích 2, và đầu ra chính xác là 2.

Quy tắc và tính điểm

Bạn có thể viết một chương trình đầy đủ hoặc một chức năng. Số byte thấp nhất sẽ thắng và các sơ hở tiêu chuẩn không được phép.

Các trường hợp thử nghiệm

Điều kiện tương thích là đối xứng, do đó, việc hoán đổi hai đầu vào không nên thay đổi đầu ra.

E G -> 1
E E -> 0
aB Bc -> 1
YY tY -> 1
abcd bcda -> 0
abcXd bxcda -> 4
Hello Hello -> 0
Hello olHel -> 1
aBaXYa aXYaBa -> 1
aXYaBa aBaXYa -> 1
HHHHHH HHttHH -> 2
abcdab cdabcd -> 2
XRRXXXXR XRXXRXXR -> 4
evveeetev tetevevev -> 7
vzzvzJvJJz vJJvzJJvJz -> 10
JJfcfJJcfJfb JcfJfbbJJJfJ -> 5
GhhaaHHbbhGGH HHaaHHbbGGGhh -> 9
OyDGqyDGDOGOGyG yDGqOGqDyyyyOyD -> 12
ffKKBBpGfGKpfGpbKb fGpbKbpBBBffbbbffK -> 9
UZuPPZuPdVdtuDdDiuddUPtUidtVVV dtUPtUidtVVVtDZbZZPuiUZuPPZuPd -> 21

Bảng xếp hạng

Đây là một Đoạn trích để tạo bảng xếp hạng và danh sách người chiến thắng theo ngôn ngữ. Để đảm bảo câu trả lời của bạn xuất hiện, hãy bắt đầu bằng tiêu đề của biểu mẫu

## Language, N bytes

Bạn có thể giữ điểm số cũ trong tiêu đề bằng cách sử dụng thẻ gạch ngang: <s>57</s>sẽ xuất hiện dưới dạng 57 .

Câu trả lời:


8

Bình thường, 16

lhf}QjT,vzvz+k.:

Tìm chuỗi con ngắn nhất của A mà khi chèn vào giữa hai bản sao B sẽ dẫn đến một chuỗi chứa A.

Điều này có thể ngắn hơn hai byte nếu dòng thứ hai không có dấu ngoặc kép, nhưng điều đó cảm thấy kỳ lạ?

Phòng thử nghiệm


4

Con trăn 3 155 168 157 byte

Tổng là chiều dài của A. So sánh từ đầu Ađến cuối Bvà trừ đi từ tổng số. So sánh từ đầu Bđến cuối Avà trừ đi từ tổng số. Trả về giá trị tuyệt đối của tổng trừ khi tổng bằng với độ dài, trong trường hợp này trả về 0.

def f(A,B):
    T=L=len(A)
    C=D=1
    for i in range(L,0,-1):
        if A[:i]==B[-i:]and C:
            T,C=T-i,0
        if A[-i:]==B[:i]and D:
            T,D=T-i,0
    return (0,abs(T))[T!=-L]

Chỉnh sửa: Xử lý f("abcdab","cdabcd")==2vụ việc


3
Thật không may, điều này không hoạt động f("abcdab", "cdabcd")mà nên là 2.
Neil

@Neil Bắt tốt. Tôi sẽ thêm nó vào các trường hợp thử nghiệm.
Zgarb


@ mEQ5aNLrK3lqs3kfSa5HbvsTwe0nIu Tôi đang nhìn vào hình ảnh và suy nghĩ 'Đây là một ý tưởng gỡ lỗi tiện lợi để sử dụng biểu tượng cảm xúc, nhưng tôi không thấy lỗi ...'. Tôi nghĩ rằng tiện ích bổ sung sẽ tàn phá trang web này.
Phi tuyến

3

Võng mạc , 49 byte

.*?(?<=^(?=(.*)(?<4-3>.)*(.*) \2.*\1$)(.)*).+
$#4

Hãy thử trực tuyến!(Sửa đổi một chút để chạy tất cả các bài kiểm tra cùng một lúc.)

Bí quyết là chúng ta cần quay lại phần Amà chúng ta không tìm thấy B, và cho đến nay tôi vẫn chưa tìm được cách nào để làm điều này mà không phải nhìn vào các nhóm cân bằng và khó chịu.


3

Jolf, 40 byte

Wά)Ζ0W<ζli)? h++i]Iζ+ζniIoά0nΖhζ}onhn}wn

Thử nó!

Tôi khá mới mẻ với Jolf, đã học được rất nhiều trong khi tìm ra điều này. Có vẻ hơi lúng túng, vẫn có thể có thể bị đánh gôn hơn nữa. Thậm chí đã loại bỏ 2 byte trong khi viết lời giải thích này.

Giải trình:

  Wά)                                      While ά (initialized to 16)
     Ζ0                                    Set ζ to 0
       W<ζli)                              While ζ < length(A)
             ? h++i]Iζ+ζniIoά0n            Set ά to 0 if (A + a substring from B of length n + A) contains B
                               Ζhζ         Increment ζ
                                  }onhn    Increment n (initialize to 0
                                       }wn Decrement n and print

Tôi đã không cố gắng một cách nghiêm túc và đây có thể là một giải pháp tối ưu, nhưng tôi khuyên bạn nên cố gắng lập bản đồ trên các phạm vi. ( s0zlisẽ cung cấp cho bạn một mảng [0 ... chiều dài i] nếu bạn muốn thử phương pháp này.)
Conor O'Brien

@ Cᴏɴᴏʀ O'Bʀɪᴇɴ Hmm, tôi sẽ đưa ra một cái nhìn ... cũng có một lệnh if mà tôi đã lúng túng trong khi xem qua tài liệu / nguồn hoặc là lựa chọn duy nhất? với một lập luận thứ ba không liên quan?
sưng

?là gần nhất với nếu có trong Jolf. Nó giống như một con chim nhạn nếu. ?ABCs returns B` nếu a là đúng, và Cnếu không.
Conor O'Brien


2

JavaScript (ES6), 110 byte

(a,b)=>{for(i=0;;i++)for(j=i;j<=a.length;j++)if(b.startsWith(a.slice(j))&&b.endsWith(a.slice(0,j-i)))return i}

Hoạt động bằng cách cắt các mảnh dài hơn ở giữa acho đến khi chúng khớp với hai đầu của b. Vòng lặp không phải là vô hạn vì nó sẽ dừng lại hoặc trước đó i == a.length.

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.