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
เป็นแฟล็กที่สามารถเป็นได้หนึ่งค่าลบหรือศูนย์ แฟล็กที่ไม่ใช่ศูนย์จะถูกวางระหว่างอักขระสองตัวที่กำลังถูกเปรียบเทียบในขณะนี้และแฟล็กเชิงลบจะถูกสงวนไว้สำหรับเซลล์หลังจากสิ้นสุดคำนำหน้าปัจจุบันและก่อนส่วนต้นของคำต่อท้ายปัจจุบัน (เช่นก่อนหน้าดัชนีของการจับคู่ที่เป็นไปได้ในปัจจุบัน)
ผลลัพธ์จะถูกจัดเก็บไว้ทางด้านซ้ายของสตริงและอัปเดตเมื่อพบการแข่งขัน
(สตริงจะถูกประมวลผลแบบย้อนกลับโดยมีการ\x01
ต่อท้าย)