Найти в Дзене
Python для школьников

Задание 24 ЕГЭ по информатике: решаем на Python без регулярных выражений

Привет! 24 задание из ЕГЭ по информатике объединяет два основных навыка: работу с файлами и умение обрабатывать строки. В этой статье я покажу как легко решать такие задачи на примере нескольких типов задач. Текстовый файл состоит не более чем из 106 символов A, B и C. Определите максимальную длину цепочки вида ABABAB... (составленной из фрагментов AB, последний фрагмент может быть неполным). Для решения такой задачи не нужен язык программирования. Достаточно открыть файл в любом текстовом редакторе (или браузере), нажать Ctrl+F и ввести цепочку символов. Как видите, редактор подсветил последовательность длиной 24 символа :) Текстовый файл содержит только заглавные буквы латинского алфавита (ABC…Z). Определите наибольшую длину цепочки символов, среди которых нет символов K и L, стоящих рядом. Строка 1. Открываем файл Строка 2. Подготавливаем строку к "разбиению", вставляем символ "/" между буквами K и L. Строка 3. Разбиваем строку через символ "/" Строка 5. Ищем максимальную последоват
Оглавление

Привет! 24 задание из ЕГЭ по информатике объединяет два основных навыка: работу с файлами и умение обрабатывать строки. В этой статье я покажу как легко решать такие задачи на примере нескольких типов задач.

Задача №1

Текстовый файл состоит не более чем из 106 символов A, B и C. Определите максимальную длину цепочки вида ABABAB... (составленной из фрагментов AB, последний фрагмент может быть неполным).

Решение

Для решения такой задачи не нужен язык программирования. Достаточно открыть файл в любом текстовом редакторе (или браузере), нажать Ctrl+F и ввести цепочку символов.

Как видите, редактор подсветил последовательность длиной 24 символа :)

Задача №2

Текстовый файл содержит только заглавные буквы латинского алфавита (ABCZ). Определите наибольшую длину цепочки символов, среди которых нет символов K и L, стоящих рядом.

Решение

-2

Строка 1. Открываем файл

Строка 2. Подготавливаем строку к "разбиению", вставляем символ "/" между буквами K и L.

Строка 3. Разбиваем строку через символ "/"

Строка 5. Ищем максимальную последовательность по длине, выводим ее длину.

Задача №3

Текстовый файл содержит только заглавные буквы латинского алфавита (ABCZ). Определите максимальное количество идущих подряд символов, среди которых не более одной буквы A.

Решение

-3

Строка 1. Открываем файл.

Строка 2. Разбиваем строку через символ "A".

Строка 3. Заводим переменную для поиска максимума.

Строка 4. Перебираем элементы списка data. Идем до предпоследнего элемента, так как мы будем брать пары "текущий элемент + следующий элемент".

Строка 5. Обновляем mx: высчитываем максимум из самого себя и суммы длин двух соседних элементов +1 (буква A).

Строка 6. Выводим результат.

Задача №4

Текстовый файл содержит только заглавные буквы латинского алфавита (ABCZ). Определите символ, который чаще всего встречается в файле сразу после буквы A.

Решение

Для подсчета количества удобно воспользоваться словарем или классом Counter в Python. Я воспользуюсь первым вариантом.

-4

Строки 1-2. Открываем и читаем файл.

Строка 3. Заводим словарь-результат.

Строка 4. Перебираем символы data.

Строки 5-6. Если текущий символ - это 'A', сохраняем следующий за ним символ в переменную symbol.

Строка 6. Увеличиваем значение для этого символа в словаре на 1.

Строка 8. В ответе получаем такой словарь

{'L': 1416, 'C': 1452, 'Z': 1513, 'H': 1467, 'I': 1435, 'G': 1555, 'B': 1505, 'N': 1504, 'W': 1450, 'D': 1487, 'O': 1459, 'E': 1478, 'J': 1423, 'X': 1480, 'V': 1502, 'F': 1526, 'T': 1457, 'Q': 1517, 'R': 1439, 'K': 1511, 'P': 1509, 'Y': 1450, 'U': 1457, 'A': 1459, 'M': 1436, 'S': 1521}

Строка 9. Для удобства можно посчитать максимум. Получим такой кортеж: ('G', 1555).

Задача №5

Текстовый файл состоит не более чем из 106 символов латинского алфавита. Определите минимальную длину подстроки, содержащую ровно 110 символов U. Для выполнения этого задания следует написать программу.

Решение

Воспользуемся методом "Скользящего окна". Будем использовать два указателя (left и right), чтобы двигаться по строке.

1. Будем расширять окно (right++), пока количество 'U' в нём меньше 110.

2. Как только количество 'U' достигает 110, будем сужать окно (left++), чтобы найти минимальную длину.

3. Если в какой-то момент количество 'U' в окне равно 110, обновляем минимальную длину.

-5

Строки 1-2. Читаем файл.

Строки 4-6. Заведем переменные: левая позиция окна, количество "U", минимальная длина (изначально берем большое значение).

Строки 8-10. Заводим цикл, достигаем первого значения строки, которая с нулевой позиции, и в которой 110 букв U.

Строки 12-18. Создаем цикл подбора минимальной строки (максимального сдвига left вправо) для текущего значения right.

Строка 15. Обновление минимальной строки, если текущая строка короче.

Строка 18. Сдвиг левой границы вправо до тех пор пока количество U не станет меньше 110.

Строка 20. Вывод результата.

Задача №6

Текстовый файл состоит из символов, обозначающих прописные буквы латинского алфавита. Определите максимальное количество идущих подряд символов, среди которых никакие две буквы из набора букв A, B и C (с учетом повторений) не записаны подряд.

Решение

Наша цель - разделить пары букв, которые не должны стоять рядом. Поэтому заменим их на * * (чтобы один символ из пары формально всегда оставался в последовательности) и разделим через пробел.

-6

Строка 4. Перебираем все возможные пары, которые нужно исключить.

Строка 5. Заменяем пары на * *.

Строка 7. Превращаем строку s в список с помощью split, ищем максимальный элемент по длине (key=len) и выводим длину этого элемента.

Надеюсь, моя статья была для вас полезной. Если возникнут вопросы - обязательно напишите их в комментариях, постараюсь ответить. В продолжение данной темы статья:

Задание 24 ЕГЭ по информатике с использованием регулярных выражений

Подписывайтесь, чтобы не пропустить новые публикации 😉

Удачи!