Bash Perl, 231 229 218 178 164 166 138 106 74 ไบต์
/^(((.*).*)\2+)\3$/;$_.=$1x2;$.--,die$+[1]if/^(.*)(.)(.*)
.*\1(?!\2).\3/
สคริปต์ต้องใช้-nสวิตช์ซึ่งบัญชีสำหรับสองไบต์
ความคิดของการผนวกสองสำเนาของทุกซ้ำเต็มรูปแบบของรูปแบบที่ได้รับมาจากคำตอบของ MT0
ตรงกันข้ามกับคำตอบอื่น ๆ ทั้งหมดวิธีนี้จะพยายามดึงรูปแบบของบรรทัดอินพุตปัจจุบันในแต่ละการวนซ้ำ มันจะล้มเหลวในบรรทัดที่มีอักขระแปลก ๆ (และใช้รูปแบบของบรรทัดก่อนหน้าแทน) สิ่งนี้ทำเพื่อรวมรูปแบบการแยกในลูปซึ่งจัดการเพื่อบันทึกไม่กี่ไบต์
เวอร์ชันที่ไม่ดี
#!/usr/bin/perl -n
# The `-n' switch makes Perl execute the entire script once for each input line, just like
# wrapping `while(<>){…}' around the script would do.
/^(((.*).*)\2+)\3$/;
# This regular expression matches if `((.*).*)' - accessible via the backreference `\2' -
# is repeated at least once, followed by a single repetition of `\3" - zero or more of the
# leftmost characters of `\2' - followed by the end of line. This means `\1' will contain
# all full repetitions of the pattern. Even in the next loop, the contents of `\1' will be
# available in the variable `$1'.
$_.=$1x2;
# Append two copies of `$1' to the current line. For the line, containing the odd
# character, the regular expression will not have matched and the pattern of the previous
# line will get appended.
#
# Since the pattern is repeated at least two full times, the partial pattern repetition at
# the end of the previous line will be shorter than the string before it. This means that
# the entire line will the shorter than 1.5 times the full repetitions of the pattern,
# making the two copies of the full repetitions of the pattern at least three times as
# long as the input lines.
$.-- , die $+[1] if
# If the regular expression below matches, do the following:
#
# 1. Decrement the variable `$.', which contains the input line number.
#
# This is done to obtain zero-based coordinates.
#
# 2. Print `$+[1]' - the position of the last character of the first subpattern of the
# regular expression - plus some additional information to STDERR and exit.
#
# Notably, `die' prints the (decremented) current line number.
/^(.*)(.)(.*)
.*\1(?!\2).\3/;
# `(.*)(.)(.*)', enclosed by `^' and a newline, divides the current input line into three
# parts, which will be accesible via the backreferences `\1' to `\3'. Note that `\2'
# contains a single character.
#
# `.*\1(?!\2).\3' matches the current input line, except for the single character between
# `\1' and `\3' which has to be different from that in `\2', at any position of the line
# containing the pattern repetitions. Since this line is at least thrice as long as
# `\1(?!\2).\3', it will be matched regardless of by how many characters the line has been
# rotated.
ตัวอย่าง
สำหรับกรณีทดสอบ
codegolfcodegolfco
egolfcodegolfcodeg
lfcodegolfcodegoff
odegolfcodegolfcod
golfcodegolfcodego
fcodegolfcodegolfc
ผลลัพธ์ของรุ่น golfed คือ
16 at script.pl line 1, <> line 2.
16,2หมายความว่าตัวละครที่แปลกมีพิกัด
การละเมิดที่โจ่งแจ้งนี้ใช้ประโยชน์จากรูปแบบเอาท์พุตแบบเสรี
ก่อนออกจากเนื้อหาของตัวแปรพิเศษของ Perl คือ:
$_ = lfcodegolfcodegoff\ncodegolfcodegolfcodegolfcodegolf
$1 = lfcodegolfcodego
$2 = f
$3 = f
( $nมีการจับคู่ของรูปแบบย่อยที่สามารถเข้าถึงได้ผ่านทาง backreference \n)