Задание №24 ЕГЭ Информатика с ответом и решением
Ответ: 13
Условие
Текстовый файл состоит не более чем из 106 символов X, Y и Z. Определите максимальную длину цепочки вида XYZXYZXYZ... (составленной из фрагментов XYZ, последний фрагмент может быть неполным).
Для выполнения этого задания следует написать программу. Ниже приведён файл, который необходимо обработать с помощью данного алгоритма.
Подсказки — как подойти к решению
- Ищем самую длинную цепочку вида XYZXYZ…, причём последний фрагмент может быть неполным. Двигайся по строке слева направо, накапливая длину текущей правильной цепочки.
- Держи счётчик длины k и помни, какой символ обязан идти следующим: он определяется остатком от деления k на 3 — за X идёт Y, за Y идёт Z, за Z снова X.
- Если очередной символ не совпадает с ожидаемым, цепочка обрывается, но новый символ X может начинать её заново — этот случай легко пропустить. Отдельно позаботься о неполном последнем фрагменте: он даёт в длину один или два символа.
Решение
Приведём решение Чуркина Николая (Тимашевск) на языке Python.
f = open('24.txt').readline()
k = m = 0
for i in range(len(f)):
if (f[i] == 'X' and k%3 == 0) or (f[i] == 'Y' and k%3 == 1) or (f[i] == 'Z' and k%3 == 2):
k += 1
m = max(m, k)
elif f[i] == 'X': k = 1
else: k = 0
print(m)
В результате работы данного алгоритма при вводе данных из файла в условии получаем ответ — 13.
Ответ: 13.
Приведём решение Новикова Андрея на языке Python.
import re
f = open('24_demo.txt').read()
r = re.findall(r'(?:XYZ)+(?:XY|X)?', f)
r = map(lambda x: len(x), r)
print(max(r))
Приведём решение Фефелова Сергея на языке Python.
f = open('24.txt').readline()
k = mx = 0
for i in range(len(f)):
if f[i-1:i+1] in 'XYZX' and k:
k += 1
elif f[i] == 'X':
k = 1
else:
k = 0
mx = max(mx, k)
print(mx)
Приведём решение Пученко Дениса на языке Python.
f=open('24.txt').readline()
k = 1
while ('XYZ' * k) in f:
k = k + 1
R = 'XYZ'*(k - 1)
if (R + 'X') in f:
if (R + 'XY') in f: print(len(R + 'XY'))
else: print(len(R + 'X'))
else: print(len(R))
Приведём решение Юрия Лысакова на языке Python.
f = open("24_demo.txt")
s = f.read()
s1 = 'XYZ'
a = s.split(s1)
while len(a) > 1:
s2 = s1
s1 += 'XYZ'
a = s.split(s1)
if s2 + 'X' in s:
s2 += 'X'
if s2 + 'Y' in s:
s2 += 'Y'
print(len(s2))
Приведём решение Михаила Глинского на языке Python.
s = open('24_demo.txt').readline()
k = 1
mk = 0
s = s.replace('XYZ','***')
if '*X' in s: s=s.replace('*X','**')
for i in range(len(s)-1):
if s[i]=='*' and s[i+1]=='*':
k+=1
mk=max(mk,k)
else: k=1
print(mk)
-->
Приведём решение Дмитрия Бурнина на языке Python.
from re import *
s = open('24_demo.txt').readline()
reg = r'(?=((XYZ)+((XY)*|X*)*))'
print(max(([len(x.group(1)) for x in finditer(reg,s)])))
Приведём решение Романа Шатило на языке Python.
s = open('24_demo.txt').readline()
s = s.replace('XYZ','***')
s = s.replace('*X','*+').replace('+Y','*+')
s = s.replace('+','+ ')
s = s.replace('X',' ').replace('Y',' ').replace('Z',' ')
print(max(len(x) for x in s.split()))
Приведём другое решение данной задачи на языке Pascal.
Для решения данной задачи будем посимвольно считывать текстовый файл. Объявим переменные: s — строка для работы с символами из файла, maxCount — максимальная длина последовательности, count — временное хранение длины последовательности, i — переменная для перебора всех символов. Алгоритм будет сравнивать значения на трех позициях, если символы будут удовлетворять нужным условиям, то значение счетчика будет увеличиваться на 1.
Приведём решение данной задачи на языке Pascal.
begin
var s: string;
var i, count, maxCount: integer;
assign(input, '24.txt');
readln(s);
count:=0;
maxCount:=0;
for i:=1 to Length(s) do
if ((s[i]='X') and (count mod 3=0)) or
((s[i]='Y') and (count mod 3=1)) or
((s[i]='Z') and (count mod 3=2)) then begin
count := count+1;
if count > maxCount then
maxCount := count;
end
else if s[i]='X' then count:=1
else count := 0;
writeln(maxCount);
end.
Приведём решение Юрия Красильникова на языке Python.
s = open('24_demo.txt').readline()
m,t = 0,0
a = 'XYZ'
for c in s:
if c == a[t%3]:
t += 1
m = max(t,m)
elif c == 'X': t = 1
else: t = 0
print(m)
Типичные ошибки
- В ответ попало количество полных фрагментов XYZ, а не длина цепочки в символах. Один фрагмент — это три символа, поэтому длину нужно считать по символам.
- Учтены только полные фрагменты XYZ, а по условию последний фрагмент может быть неполным. Посчитай, сколько символов цепочки остаётся за пределами полных троек.
В тренажёре: подсказки по шагам, разбор твоей ошибки ИИ-репетитором (он не даёт готовый ответ), повторение ошибок по интервалам и общий прогресс. Все задания №24 по информатике