Bash Perl, 231 229 218 178 164 166 138 106 74 Bytes
/^(((.*).*)\2+)\3$/;$_.=$1x2;$.--,die$+[1]if/^(.*)(.)(.*)
.*\1(?!\2).\3/
Das Skript erfordert die Verwendung des -nSchalters, der zwei der Bytes ausmacht.
Die Idee, zwei Kopien aller vollständigen Wiederholungen des Musters anzuhängen, wurde aus der Antwort von MT0 übernommen .
Im Gegensatz zu allen anderen Antworten wird bei diesem Ansatz versucht, das Muster der aktuellen Eingabezeile in jeder Iteration zu extrahieren. Es schlägt in der Zeile mit dem ungeraden Zeichen fehl (und verwendet stattdessen das Muster der vorherigen Zeile). Dies geschieht, um die Musterextraktion in die Schleife aufzunehmen, die es schafft, einige Bytes zu sparen.
Ungolfed-Version
#!/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.
Beispiel
Für den Testfall
codegolfcodegolfco
egolfcodegolfcodeg
lfcodegolfcodegoff
odegolfcodegolfcod
golfcodegolfcodego
fcodegolfcodegolfc
Die Ausgabe der Golf-Version ist
16 at script.pl line 1, <> line 2.
was bedeutet, dass das ungerade Zeichen die Koordinaten hat 16,2.
Dieser offensichtliche Missbrauch macht sich das liberale Ausgabeformat zunutze.
Kurz vor dem Beenden sind die Inhalte einiger spezieller Perl-Variablen:
$_ = lfcodegolfcodegoff\ncodegolfcodegolfcodegolfcodegolf
$1 = lfcodegolfcodego
$2 = f
$3 = f
( $nEnthält die Übereinstimmung des Submusters, auf das über die Rückreferenz zugegriffen werden kann \n.)