Задание 24 ЕГЭ по информатике — Обработка символьной информации (скользящее окно)
Разбор номера «Обработка символьной информации (скользящее окно)»: как устроено задание, настоящие формулировки из тренажёра с подсказками и официальным решением. Окно практики открывается сразу — без регистрации и онбординга.
Задание 24 (№24 — Обработка символьной информации (скользящее окно)) — вопрос первой части экзамена по информатике: короткий ответ, который проверяется автоматически. Ниже — реальные формулировки из тренажёра с подсказками и разбором; проверка работает прямо на этой странице.
Окно примера ниже — то же, что на сайте: подсказки по одной, автопроверка ответа и разбор.
Примеры задания 24
№ 24Пример 1краткий ответ★★★★★1 первичный балл
Текстовый файл состоит из цифр от 1 до 9, знаков операций «+», «–» и «*» (сложение, вычитание и умножение) и заглавных латинских букв A, B, C, D. Назовём правильной суммой строку, содержащую последовательность из одного или более десятичных чисел, в которой между соседними числами стоит ровно один знак «+» или «-» и нет других знаков. Примеры правильных сумм: «23», «115+6», «1980+12−123−51+3». Назовём результатом правильной суммы число, которое получится при выполнении записанных в соответствующей строке сложений. Например, результат правильной суммы «2+3» — число 5, а результат правильной суммы «1+2−8+3» — число −2. Найдите в данной строке расположенную непосредственно после буквы С правильную сумму с наибольшим результатом. В ответе запишите результат найденной суммы. Гарантируется, что ответ не превышает 2 · 109. Задание 24
Подсказка 1. Определи, что ищут в строке: длину цепочки по признаку, подстроку с условием или подсчёт символов по классам.
Подсказка 2. Иди по строке одним проходом, держа длину текущей цепочки и лучшее найденное значение, и сбрасывай счётчик там, где условие нарушается.
Подсказка 3. Помни, что цепочка непрерывна, а ответ бывает длиной или позицией; типичная ошибка — сбросить счётчик на один символ раньше или позже.
Разбор.
Решение. Приведём решение Юрия Красильникова на языке Python. import re s = re.findall(r'C[1-9]+(?:[+\-][1-9]+)*', open('24.txt').readline()) ans = -10**20 for x in s: stop = [i for i in range(len(x)) if x[i] in '+-'] stop += [len(x)] m = max([eval(x[1:t]) for t in stop]) ans = max(ans,m) print(ans) Ответ: 221. Приведём решение Юрия Красильникова на языке Python. def calc(s): t=0 i=0 while s[i] in '123456789': t=t*10+int(s[i]) i+=1 ans=[t] while True: op=s[i] if op not in '+-': return max(ans) i+=1 if s[i] not in '123456789': return max(ans) t=0 while s[i] in '123456789': t=t*10+int(s[i]) i+=1 ans.append(ans[-1]+(t if op == '+' else -t)) a = open('24.txt').readline().split('C')[1:] print(max([calc(x+'!') for x in a if len(x) > 0 and x[0] in '123456789'])) Приведём решение Сергея Донец на PascalABC.NET: begin ReadAllText('24.txt').Matches('C(\d+(?:[+-]\d+)*)') .Select(m-> m.Groups[1].Value.Matches('[+-]?\d+') .Select(x-> x.Value.ToInteger) .Scan(0, (acc, x)-> acc + x).Max).Max.Print; end.
Ответ.
221
№ 24Пример 2краткий ответ★★★★★1 первичный балл
Текстовый файл содержит строки различной длины, содержащие только заглавные буквы латинского алфавита (ABC Z). Будем называть цепочкой группу идущих подряд одинаковых букв в одной строке. Определите, сколько раз буква, образующая самую длинную цепочку в файле, встречается в строке, содержащей эту цепочку. Если в файле есть несколько цепочек одинаковой максимальной длины, нужно выбрать ту из них, для которой общее количество образующих цепочку букв в соответствующей строке будет больше. Задание 24 Пример. Пусть файл содержит такие строки: ABBAAABBABBXY XYYYXYAB Здесь в первой строке есть цепочка длины 3, образованная буквами A, всего буква A в этой строке встречается 5 раз. Во второй строке тоже есть цепочка длины 3, но образующая эту цепочку буква Y встречается в этой строке всего 4 раза. 5 > 4, поэтому в ответе в данном случае надо записать число 5.
Подсказка 1. Определи, что ищут в строке: длину цепочки по признаку, подстроку с условием или подсчёт символов по классам.
Подсказка 2. Иди по строке одним проходом, держа длину текущей цепочки и лучшее найденное значение, и сбрасывай счётчик там, где условие нарушается.
Подсказка 3. Помни, что цепочка непрерывна, а ответ бывает длиной или позицией; типичная ошибка — сбросить счётчик на один символ раньше или позже.
Разбор.
Решение. Приведем решение на языке Python. f = open('24.txt') mx=-1 mxall=-1 for s in f: k=1 for i in range(len(s)-1): if s[i]==s[i+1]: k+=1 if k>mx: mx=k mxall=s.count(s[i]) if k==mx: mxall = max(s.count(s[i]), mxall) else: k=1 print(mxall)
Ответ.
45
Как устроена практика в тренажёре
Опыт за каждое решение
Чистое решение без подсказок ценится выше: опыт, уровни и серии растут с каждым заданием, а не за клики.
Ошибки не пропадают
Нерешённое возвращается в работу над ошибками — тренажёр приведёт к заданию снова, пока оно не закроется без помощи.
Прогноз балла
После нескольких решённых номеров тренажёр показывает прогнозный балл и говорит, какие темы подтянуть, чтобы его поднять.
Закрепи задание 24 в тренажёре
Окно практики откроется сразу — без имени и онбординга. Прогресс сохранится, как только укажешь имя.