Задание EGEINFE74424: Обработка текстового файла

ФИПИ · ЕГЭ · все форматы ответа · 2475 заданий

Открыть решение ↓ Ошибка или пожелание

Тип задачи: Обработка текстового файла.

Учебные темы: Обработка символьных данных. Встроенные функции языка программирования для обработки символьных строк. Алгоритмы обработки символьных строк: подсчёт количества появлений символа в строке, разбиение строки на слова по пробельным символам, поиск подстроки внутри данной строки, замена найденной подстроки на другую строку. Генерация всех слов в некотором алфавите, удовлетворяющих заданным ограничениям. Преобразование числа в символьную строку и обратно.

Впишите правильный ответ.

 Рисунок из условия ФИПИЗадание выполняется с использованием прилагаемых файлов.

 

Текстовый файл состоит из заглавных букв латинского алфавита Q, R, W и цифр 1, 2, 4.

Определите в прилагаемом файле максимальное количество идущих подряд символов, среди которых ни одна буква не стоит рядом с буквой, а цифра – с цифрой.

Для выполнения этого задания следует написать программу.

Скачать файл задания (TXT, ФИПИ)


i
СВОЙСТВА ЗАДАНИЯ
КЭС:
3.9 Обработка символьных данных. Встроенные функции языка программирования для обработки символьных строк. Алгоритмы обработки символьных строк: подсчёт количества появлений символа в строке, разбиение строки на слова по пробельным символам, поиск подстроки внутри данной строки, замена найденной подстроки на другую строку. Генерация всех слов в некотором алфавите, удовлетворяющих заданным ограничениям. Преобразование числа в символьную строку и обратно
Тип ответа:Краткий ответ
Номер: E74424
НЕ РЕШЕНО Ответить

Решение задания EGEINFE74424

Ответ: 17

В подходящем фрагменте чередуются два класса: буквы Q, R, W и цифры 1, 2, 4. Пары QW и 12 запрещены, хотя в каждой из них символы различны. Пары Q1 и 4R разрешены. Если проверки принадлежности классу букв у двух соседей дают равные логические значения, перед нами запрещённая пара: две буквы или две цифры.
Пусть current — длина самого длинного допустимого фрагмента, заканчивающегося на текущем символе. Для первого символа она равна 1. Если новая соседняя пара разрешена, прежний фрагмент продлевается: current увеличивается на 1. Если пара запрещена, начинаем с текущего символа заново: current = 1.
После каждого символа обновляем общий максимум best. Обязательно делаем это и на последнем символе: иначе можно потерять самую длинную серию в конце файла. Перевод строки не относится к алфавиту задачи, поэтому убираем его с помощью strip.
Сохраните скачанный файл под именем 1_24.txt рядом с программой. Полная программа на Python 3:

s = open('1_24.txt', encoding='utf-8').read().strip()
current = 0
best = 0
for i in range(len(s)):
    if i == 0:
        current = 1
    else:
        forbidden = (s[i - 1] in 'QRW') == (s[i] in 'QRW')
        if forbidden:
            current = 1
        else:
            current += 1
    best = max(best, current)
print(best)

Программа выводит 17. Для вычисления достаточно одного прохода по строке.
Проверка корректности. В уже найденном фрагменте все соседние пары допустимы. После добавления символа нужно проверить только новую последнюю пару. Если она запрещена, любой более длинный фрагмент с тем же концом содержит её и тоже запрещён. Следовательно, правило обновления находит максимальную длину для каждого возможного конца.
Независимая проверка состоит в разрезании исходной строки по всем запрещённым соседним парам. Каждая полученная часть допустима, а любой допустимый фрагмент целиком лежит в одной из частей. Поэтому максимум их длин должен совпасть с результатом программы.

ХарактеристикаЗначение
Символов в файле10000000
Частей между запрещёнными границами6800802
Максимальная длина17

Максимальный фрагмент расположен на позициях 2961667–2961683, если считать с 1. Его длина 2961683 − 2961667 + 1 = 17.
Сам фрагмент: 4W2W2R2R4Q4Q4Q2R2.
На левой границе стоят символы 14, на правой — 24. Обе пары запрещены, поэтому фрагмент нельзя продлить. Сравнение всех частей подтверждает, что более длинных нет.
Ответ: 17.

Помочь улучшить сайт

Напишите пожелание к сайту или решению либо сообщите о найденной неточности в задании EGEINFE74424.

Сообщение увидит только команда сайта: на странице оно не публикуется.

Комментарии к решению

Комментарии видны всем посетителям сайта.

Комментариев пока нет. Будьте первым.

Чтобы оставить комментарий, войдите или зарегистрируйтесь.