Текстовый файл состоит из символов P, Q, R и S. В прилагаемом файле найдите наибольшее число символов в непрерывной подпоследовательности, которая состоит из идущих подряд групп символов SQRP. При этом в начале и в конце искомой последовательности группа символов SQRP может быть неполной.
Искомая последовательность должна содержать не менее одной полной группы символов SQRP. Например, условию задачи удовлетворяют RPSQRPSQRPS, или PSQRPSQRPSQ, или SQRPSQRPSQR и т. п.
Для выполнения этого задания нужно написать программу.
Решение
Regexp
🔹 Шаг 1. Подключаем модуль re
import re
📌 Подключаем модуль re: дальше поиск пойдёт по шаблону, а не по символам вручную.
🔹 Шаг 2. Читаем строку файла
s = open("24.txt").readline()
📌 Читаем строку файла. Ищем куски по кругу SQRP: с краёв круг может быть обрезан, но внутри должна быть хотя бы одна целая группа.
🔹 Шаг 3. Собираем шаблон
# слева можно QRP, RP или P, в середине SQRP один или несколько раз, справа S, SQ или SQR
a = re.findall(r"(?:QRP|RP|P)?(?:SQRP)+(?:SQR|SQ|S)?", s)
📌 Собираем шаблон. Середина — (?:SQRP)+: одна или несколько целых групп, плюс не звёздочка. Слева необязательно QRP, RP или P, справа — S, SQ или SQR (длинный вариант записан первым). Пример: RPSQRPSQRPS — это RP, две SQRP и S.
🔹 Шаг 4. findall находит все такие куски
print(max(map(len, a)))
📌 findall находит все такие куски. max по длине выбирает самый длинный. Жми RUN — в выводе будет 52.
✅ Ответ: 52
🔹 Полный код
import re
s = open("24.txt").readline()
# слева можно QRP, RP или P, в середине SQRP один или несколько раз, справа S, SQ или SQR
a = re.findall(r"(?:QRP|RP|P)?(?:SQRP)+(?:SQR|SQ|S)?", s)
print(max(map(len, a)))