Dizelerim ne kadar uyumlu?


12

Giriş

Aynı uzunlukta L olan iki A ve B dizesini ve bir K ≥ 0 tamsayısını düşünün . Bu meydan amaçları için, biz dizeleri olduğunu söylemek K bir dize mevcutsa, uyumlu bir C uzunluğunun K öyle ki bir birleştirme bitişik bir alt dize olan BCB . Not, bir de bir alt BAB nedenle, bir ve B her zaman L -uyumlu (ama aynı zamanda olabilir K başka için uyumlu bir K <L ).

Giriş

Girişleriniz, büyük ve küçük ASCII harflerinden oluşan aynı pozitif uzunluğa sahip iki dizedir.

Çıktı

Çıktınız, girdiler K uyumlu olacak şekilde negatif olmayan en düşük tam sayı K olmalıdır .

Misal

Girdileri düşünün

A = HHHHHH
B = HHttHH

Bunlar 0 ile uyumlu değildir, çünkü A bir alt dizesi değildir HHttHHHHttHH. Ayrıca 1 uyumlu değildirler, çünkü A , HHttHH#HHttHHhangi harfin üzerine yerleştirildiğine bakılmaksızın bir alt dizesi değildir #. Bununla birlikte, A , bir alt dizgidir HHttHHHHHHttHH; burada C , iki harfli dizedir HH. Böylece girişler 2 uyumludur ve doğru çıkış olur 2.

Kurallar ve puanlama

Tam bir program veya işlev yazabilirsiniz. En düşük bayt sayısı kazanır ve standart boşluklara izin verilmez.

Test senaryoları

Uyumluluk koşulu simetriktir, bu nedenle iki girişi değiştirmek çıktıyı değiştirmemelidir.

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

Liderler Sıralaması

Lider panosu ve dile göre kazananların listesini oluşturmak için bir Yığın Snippet'i. Yanıtınızın göründüğünden emin olmak için, formun bir başlığıyla başlayın

## Language, N bytes

Üstü çizili etiketleri kullanarak üstbilgideki eski puanları koruyabilirsiniz: 57<s>57</s> olarak görünür .

Yanıtlar:


8

Pyth, 16

lhf}QjT,vzvz+k.:

B'nin iki kopyası arasına yerleştirildiğinde A içeren bir dizeyle sonuçlanan A'nın en kısa alt dizesini bulun.

İkinci satırda tırnak yoksa iki bayt daha kısa olabilir, ama bu garip geliyor mu?

Test odası


4

Python 3, 155 168 157 bayt

Toplam uzunluğu A. Başlangıcıyla Abitişi karşılaştırın ve Btoplamdan çıkarın. Başlangıcıyla Bbitişi karşılaştırın ve Atoplamdan çıkarın. Toplam, uzunluğa eşit olmadığı sürece toplamın mutlak değerini döndürün, bu durumda 0 değerini döndürün.

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]

Düzenleme:f("abcdab","cdabcd")==2 Davayı halledin


3
Ne yazık ki bu işe yaramaz. f("abcdab", "cdabcd")2 olmalıdır.
Neil

@Neil İyi yakala. Bunu test senaryolarına ekleyeceğim.
Zgarb


@ mEQ5aNLrK3lqs3kfSa5HbvsTWe0nIu Görüntüye bakıyordum ve 'Bu emojiyi kullanmak için şık bir hata ayıklayıcı fikri, ama bir hata görmüyorum ...' diye düşünüyordum. Eklentinin bu sitede hasara yol açacağını düşünüyorum.
NonlinearFruit

3

Retina , 49 bayt

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

Çevrimiçi deneyin! (Tüm testleri bir kerede çalıştırmak için biraz değiştirildi.)

Yapmamız kısmını üzerine sarfınazar gerektiğidir Abiz değil bulmak Bve bugüne kadar ben oldukça rahatsız edici lookarounds ve dengeleme gruplar olmadan bunu yapmanın bir yolunu bulamadı.


3

Jolf, 40 Bayt

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

Dene!

Jolf için oldukça yeniyim, bunu anlarken çok şey öğrendim. Biraz garip görünüyor, yine de muhtemelen daha fazla golf olabilir. Bu açıklamayı yazarken 2 bayt bile devirdi.

Açıklama:

  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

Ciddiyetle denemedim ve bu en uygun çözüm olabilir, ancak aralıkları eşlemeye çalışmanızı öneririm. ( s0zlibu yaklaşımı denemek isterseniz size bir dizi [0 ... uzunluk i] verecektir.)
Conor O'Brien

@ Cᴏɴᴏʀ O'Bʀɪᴇɴ Hmm, ben bir göz atacağım ... Ayrıca belge / kaynak bakarken jmissed bir if komut var mı ya da tek seçenek? alakasız üçüncü bir argümanla?
şişer

?Jolf bir varsa en yakın olanıdır. Üçlü gibi bir şey. ?ABCs returns B` a doğruysa ve Caksi takdirde.
Conor O'Brien


2

JavaScript (ES6), 110 bayt

(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}

aİki ucuyla eşleşene kadar uzun parçalarını ortasından dilimleyerek çalışır b. Döngü, üzerinde veya öncesinde duracağı için sonsuz değildir i == a.length.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.