433просмотров
38.5%от подписчиков
13 марта 2026 г.
Score: 476
Задачи с запрещенными комбинациями / сопоставлением соседних символов в №24 Продолжаем серию постов по 24 заданию 🚀 ✅ Повторяющиеся комбинации 👉 Запрещённые комбинации (сейчас) 🔜 Ограниченное количество 🔜 Сложные шаблоны 🔜 Несколько строк 🔜 Частотный анализ Сегодня второй тип, точнее, целых 2 подхода и 2 весьма близкие группы задач! Этот тип встречался даже на ЕГЭ-2025! Снова без теории, сразу практика. Задачи возьму с bank-kege.ru 1️⃣ №24.10002: Текстовый файл состоит из символов X, Y, и Z. Определите максимальное количество идущих подряд символов, среди которых нет подстроки XZZY. 1⃣ Запрещенные комбинации Идея: В строке YXZZYX есть 2 подходящие подстроки: YXZZ и ZZYX. Да, XZZY встречаться не может, но подходящая подстрока спокойно может заканчиваться на XZZ, а следующая - начинаться на ZZY. Поэтому делаем замену: "XZZY" -> "XZZ ZZY", а далее просто рубим строку методом split() по пробелам, выбираем самый длинный из получившихся кусков. Код: s = open('24.10002.txt').readline().strip() s = s.replace('XZZY', 'XZZ ZZY') a = s.split() print(len(max(a, key=len))) # выбираем максимум по длине 2⃣ Сопоставление соседних символов Идея: Первые 3 символа уже образуют подходящую строку, будем перебирать и проверять каждый следующий. Если текущий символ не является Y, стоящим после XZZ, то добавляем его к имеющейся строке и обновляем максимум. Иначе - прошлая подходящая строка закончилась, а текущий символ вместе с двумя предыдущими образует новую подходящую строку длины 3. Код: s = open('24.10002.txt').readline().strip() cur_len = 3 mx = 3 for i in range(3, len(s)): if s[i - 3:i + 1] != 'XZZY': cur_len += 1 mx = max(mx, cur_len) else: cur_len = 3 print(mx) 2️⃣ 24.50013: Текстовый файл состоит из символов X, Y и Z. Определите максимальное количество идущих подряд символов, расположенных в алфавитном порядке (возможно, с повторением символов). 1⃣ Запрещенные комбинации Идея: Запрещенными будем считать все комбинации, нарушающие алфавитный порядок: YX, ZY, ZX. Тогда просто "раздвинем" эти пары, заменим "YX" на "Y X", аналогично с остальными парами. Далее рубим строку методом split() по пробелам, выбираем самый длинный из получившихся кусков. Код: s = open('24.50013.txt').readline().strip() s = s.replace('YX', 'Y X') s = s.replace('ZY', 'Z Y') s = s.replace('ZX', 'Z X') a = s.split() print(len(max(a, key=len))) 2⃣ Сопоставление соседних символов Идея: 1 любой символ уже образует подходящую строку, а каждый следующий будет продолжением подходящей цепочки, если он больше или равен предыдущего по алфавиту (сравнение оператором <= как раз сработает по алфавиту). Если текущий символ продолжением цепочки не является, он будет началом новой. Каждый раз, добавляя символ к цепочке, обновляем максимум. Код: s = open('24.50013.txt').readline().strip() cur_len = 1 mx = 1 for i in range(1, len(s)): if s[i] >= s[i - 1]: cur_len += 1 mx = max(mx, cur_len) else: cur_len = 1 print(mx) Можно заметить, что по формулировке первой задаче ближе первый способ (в условии есть прямой запрет), а второй - второй (описывается, наоборот, какой должна быть подстрока. Но любую задачу, решаемую первым способом, всегда можно решить вторым, и наоборот) Поэтому выбирайте тот, что ближе, но я как всегда рекомендую освоить оба)) Практиковаться можете в базе bank-kege.ru Также устроим голосовалку: какой способ больше зашел? 🔥 Запрещенные комбинации (реплейсы и сплит) 💯 Сопоставление соседних символов (цикл for) А в комментах можете задавать вопросы по коду и делиться своими решениями! #информатика #задание24
433
просмотров
3718
символов
Да
эмодзи
Нет
медиа

Другие посты @egeinf_maxim

Все посты канала →
Задачи с запрещенными комбинациями / сопоставлением соседних — @egeinf_maxim | PostSniper