brainfuck, 226 바이트
,[<<<,]+[>>->[[[[>>[>>>]<+<-<[<<<]>>+<-]>[<+>-]>[>>>]<<[>[<+>-]]>[[<+>-]>+[<<<]>
>>-[+>[<<<]<[>+>[->]<<[<]>-]>[<+>>+<-]>>>[>>>]]>>]<]>+[,<<<+]->[<<<]>>>>>+[,+>>>
+]-[>>>]->]<[+<<<]+<<<++[->>>]+>>>->]<[,<<<]<[>>>+<<<-]>+>,>>>]<<.
형식화 :
,[<<<,]
+
[
for each suffix
>>->
[
for each prefix
[
for each suffix
[
for each char while no mismatch
[
>>[>>>]
<+<-<[<<<]
> >+<-
]
>[<+>-]
>[>>>]
<<
[
mismatch
>[<+>-]
]
>
[
[<+>-]
>+[<<<]
>>>-
[
match
+>[<<<]
<
[
>+>[->]
<<[<]
>-
]
>[<+> >+<-]
>>>[>>>]
]
>>
]
<
]
>+[,<<<+]
->[<<<]
>>> >>+[,+>>>+]
-[>>>]
->
]
<[+<<<]
+<<<++[->>>]
+>>>->
]
<[,<<<]
<[>>>+<<<-]
>+>,>>>
]
<<.
후행 줄 바꿈이 있거나없는 입력을 예상하고 결과를 바이트 값 으로 출력합니다 .
온라인으로 사용해보십시오.
이렇게하면 각 접두사를 확인하여 나중에 문자열에서 발생하는지 확인한 다음 첫 문자를 잘라 내고 문자가 더 이상 없을 때까지 프로세스를 반복합니다.
테이프는 3 셀 노드로 나뉩니다.
c 0 f
여기서 c
주어진 문자열의 문자이며 f
1, 음수 또는 0 일 수있는 플래그입니다. 현재 비교중인 두 문자 사이에 0이 아닌 플래그가 배치되고 현재 접두어 종료 후와 현재 접미어 시작 이전 (즉, 현재 전위 일치 색인 이전)에 셀에 대해 음수 플래그가 예약됩니다.
결과는 문자열 왼쪽에 저장되며 일치하는 항목이 발견 될 때마다 업데이트됩니다.
(문자열은 실제로 \x01
추가 된 문자열과 반대로 처리됩니다 .)