Наскільки сумісні мої струни?


12

Вступ

Розглянемо два рядки A і B однакової довжини L і ціле число K ≥ 0 . Для цілей цього виклику ми говоримо, що струни є K- сумісними, якщо існує рядок C довжиною K таким, що A є суміжним підрядком конкатенації BCB . Зауважте, що A є підрядком BAB , тому A і B завжди сумісні з L (але можуть бути також K- сумісні для деяких інших K <L ).

Вхідні дані

Ваші входи - це два рядки однакової позитивної довжини, що складаються з великих та малих літер ASCII.

Вихідні дані

Вихід повинен бути найнижчим невід'ємним цілим числом K таким, що вхідні дані суміщаються з K.

Приклад

Розглянемо вхідні дані

A = HHHHHH
B = HHttHH

Вони не сумісні з 0, оскільки A не є підрядком HHttHHHHttHH. Вони також не сумісні з 1, тому що A не є підрядком HHttHH#HHttHHнезалежно від того, яка буква розміщена на #. Однак A є підрядком HHttHHHHHHttHH, де C - двобуквенна рядок HH. Таким чином, входи 2-сумісні, і правильний вихід 2.

Правила та оцінка

Ви можете написати повну програму або функцію. Виграє найменший байт, а стандартні лазівки заборонені.

Тестові справи

Умова сумісності симетрична, тому заміна двох входів не повинна змінювати вихід.

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

Таблиця лідерів

Ось фрагмент стека для створення таблиць лідерів та списку переможців за мовою. Щоб відповідь з’явилася, почніть її із заголовка форми

## Language, N bytes

Ви можете зберігати старі бали у заголовку, використовуючи перекреслені теги: <s>57</s>відображатиметься як 57 .

Відповіді:


8

Піта, 16

lhf}QjT,vzvz+k.:

Знайдіть найкоротшу підрядку A, яка, вставлена ​​між двома копіями B, призводить до рядка, що містить A.

Це може бути на два байти коротше, якщо в другому рядку не було лапок, але це дивно?

Тестовий сюїт


4

Python 3, 155 168 157 байт

Загальна довжина A. Порівняйте початок Aдо кінця Bта відніміть цей від усього. Порівняйте початок Bдо кінця Aта відніміть цей від усього. Повертайте абсолютне значення загальної суми, якщо загальне не дорівнює довжині, в цьому випадку поверніть 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]

Редагувати: розглянути f("abcdab","cdabcd")==2справи


3
На жаль, це не працює, для f("abcdab", "cdabcd")чого має бути 2.
Ніл

@Neil Хороший улов. Я додам це до тестових випадків.
Згарб


@ mEQ5aNLrK3lqs3kfSa5HbvsTWe0nIu Я дивився на зображення і думав: "Це чудова ідея налагодження для використання емоджи, але я не бачу помилок ...". Я думаю, що надбудова спричинить хаос на цьому сайті.
нелінійний

3

Сітківка , 49 байт

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

Спробуйте в Інтернеті! (Трохи модифікований для запуску всіх тестів одразу.)

Хитрість полягає в тому, що нам потрібно відхилити ту частину, Aяку ми не знаходимо B, і до цих пір я не знайшов способу зробити це без досить роздратованих пошукових груп і балансуючих груп.


3

Джольф, 40 байт

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

Спробуй це!

Я зовсім новачок у Джольфа, багато чого навчився, з'ясовуючи це. Здається, трохи незручно, все-таки, можливо, можна було би покататися далі в гольф. Навіть збив 2 байти під час написання цього пояснення.

Пояснення:

  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

Я не намагався серйозно, і це може бути оптимальним рішенням, але я пропоную спробувати скласти карту за діапазонами. ( s0zliдасть вам масив [0 ... length i], якщо ви хочете спробувати цей підхід.)
Conor O'Brien

@ Cᴏɴᴏʀ O'Bʀɪᴇɴ Гм, я подивлюсь ... а чи є команда if, яку я пропустив під час перегляду документації / джерела чи це єдиний варіант? з нерелевантним третім аргументом?
опухає

?є найближчим до того, якщо є в Джольфа. Це як трійця, якщо. ?ABCs returns B` якщо a є правдою, і Cінакше.
Conor O'Brien


2

JavaScript (ES6), 110 байт

(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поки вони не збігаються з двох кінців b. Цикл не нескінченний, оскільки він зупинятиметься на або раніше i == a.length.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.