with open('text.txt', 'r') as f:
import re
print(max([len(i[0]) for i in re.findall('((XYZ)+(X|XY)?)', f.read())]))
Это с учётом условия
"последний фрагмент может быть неполным"
т.е. я понял он может быть просто как 'XY, 'X'. По итогу вышло, что максимальная длина цепочки 13. Значит она будет иметь примерный вид как
"XYZXYZXYZXYZX".
Только мне чуть кажется, что я точно что-то не правильно задал в условии для поиска, ну.. если что призову всезнающего.
Update: Хах, я ток ща перечитывая условие, заметил заметку "правильный ответ 13"