Найти в Дзене

Задачи с запрещенными комбинациями / сопоставлением соседних символов в №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,

Задачи с запрещенными комбинациями / сопоставлением соседних символов в №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