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

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

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

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

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

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

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

 

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

В ответе запишите число – количество символов в найденной последовательности.

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

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


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

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

Ответ: 132

Решение.

Любая подходящая последовательность начинается в позиции буквы N и заканчивается раньше следующей N. Поэтому при каждой новой N прежнее начало больше использовать нельзя: устанавливаем новое начало и обнуляем счётчик цифр. До первой N подходящей последовательности нет.

Двигаем правую границу по одному символу. Цифры распознаём по диапазону от «0» до «9»; все остальные разрешённые символы — заглавные латинские буквы. Пока цифр меньше 55, условие ещё не выполнено. Когда их ровно 55, текущая длина подходит; следующие буквы могут увеличить её. После 56-й цифры ни одна более длинная последовательность с этим началом уже не подойдёт. Ожидаем следующую N.

Для каждого допустимого начала проверены все правые границы до следующей N. Каждая последовательность, удовлетворяющая условию, входит в этот просмотр, поэтому наибольшая сохранённая длина является глобальным максимумом.

Проверка. Контрольный фрагмент занимает позиции 3243577–3243708 включительно, считая с 1. Он начинается с N, не содержит других N и содержит ровно 55 цифр. Его длина равна 3243708 − 3243577 + 1 = 132. Счётчик включает все символы фрагмента, а не только цифры.

Программа Python; переименуем извлечённый текстовый файл в data.txt либо укажем его исходное имя в open:

with open("data.txt", encoding="utf-8-sig") as f:
    s = f.read().strip()
start = -1
digits = 0
best = 0
for i, ch in enumerate(s):
    if ch == "N":
        start = i
        digits = 0
    elif start >= 0:
        if "0" <= ch <= "9":
            digits += 1
        if digits == 55:
            best = max(best, i - start + 1)
print(best)

Программа проходит по строке за линейное время. Дополнительные счётчики не растут с длиной файла. Независимый алгоритм по позициям символов и вхождений подтвердил максимум.

Ответ: 132.

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

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

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

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

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

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

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