내 문자열은 얼마나 호환됩니까?


12

소개

길이 L 이 같은 두 개의 문자열 AB 와 정수 K ≥ 0을 고려하십시오 . 이 과제의 목적을 위해 , A 가 연결 BCB 의 연속 서브 스트링이 되도록 길이 K 의 스트링 C 가 존재하는 경우 스트링이 K 호환 가능 하다고합니다 . 참고 A는 의 서브 스트링 BAB 있도록 및 B는 항상 L 호환 (또한있을 수 K는 다른 호환을위한 K <L ).

입력

입력은 대문자와 소문자 ASCII 문자로 구성된 양의 길이가 동일한 두 개의 문자열입니다.

산출

입력이 K와 호환 되도록 출력은 음이 아닌 가장 낮은 정수 K 이어야합니다 .

입력을 고려하십시오

A = HHHHHH
B = HHttHH

A 는의 하위 문자열 이 아니므로 0과 호환 되지 않습니다 HHttHHHHttHH. A 는에서 HHttHH#HHttHH어떤 문자를 배치하든 상관없이 하위 문자열이 아니기 때문에 1과 호환 되지 않습니다 #. 그러나 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.:

B의 두 사본 사이에 삽입 될 때 A가 포함 된 문자열이되는 A의 가장 짧은 부분 문자열을 찾으십시오.

두 번째 줄에 따옴표가 없으면 2 바이트가 짧을 수 있지만 이상하게 느껴 집니까?

테스트 스위트


4

파이썬 3 155 168 157 바이트

총 길이는 A입니다. 시작과 A끝을 비교하고 B총계에서 뺍니다. 시작과 B끝을 비교하고 A총계에서 뺍니다. total이 길이와 같지 않으면 total의 절대 값을 반환합니다.이 경우 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

@Neil Good catch. 테스트 사례에 추가하겠습니다.
Zgarb


@ mEQ5aNLrK3lqs3kfSa5HbvsTWe0nIu 나는 이미지를보고 '이모지를 사용하는 멋진 디버거 아이디어이지만 버그를 보지 못했습니다 ...' 부가 기능이이 사이트를 혼란스럽게 할 것이라고 생각합니다.
NonlinearFruit

3

레티 나 , 49 바이트

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

온라인으로 사용해보십시오! (모든 테스트를 한 번에 실행하도록 약간 수정했습니다.)

요령은 에서 찾을 수없는 부분을 ​​역 추적해야 A한다는 것입니다. 지금까지는 성가신 둘러보기 및 균형 그룹없이이 작업을 수행 할 수있는 방법을 찾지 못했습니다.B


3

Jolf, 40 바이트

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

시도 해봐!

나는 Jolf를 처음 접했고 이것을 알아내는 동안 많은 것을 배웠습니다. 약간 어색한 것 같지만 여전히 더 골프를 칠 수 있습니다. 이 설명을 쓰는 동안 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 ... 길이 i]를 줄 것입니다.)
Conor O'Brien

@ Cᴏɴᴏʀ O'Bʀɪᴇɴ 흠, 내가 보라 ... 또한 문서 / 소스를 살펴 보면서 누락 된 if 명령이 있거나 유일한 옵션입니까? 관련없는 세 번째 주장으로?
부풀어

?Jolf에있는 경우에 가장 가까운 것입니다. 그것은 삼항과 같습니다. ?ABCs returns a가 참이면 B`, C그렇지 않으면 B.
코너 O'Brien


2

자바 스크립트 (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.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.