πЕГЭ · ИИ-репетитор12 предметов · задания ФИПИ
Главная → Информатика → Задания №24 → Задание i24-03

Задание №24 ЕГЭ Информатика с ответом и решением

Ответ: 13

Условие

Текстовый файл состоит не более чем из 106 символов X, Y и Z. Определите максимальную длину цепочки вида XYZXYZXYZ... (составленной из фрагментов XYZ, последний фрагмент может быть неполным).

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

Файл с исходными данными к этому заданию в открытом банке не опубликован — разбирай подход по официальному решению ниже.

Подсказки — как подойти к решению

  1. Ищем самую длинную цепочку вида XYZXYZ…, причём последний фрагмент может быть неполным. Двигайся по строке слева направо, накапливая длину текущей правильной цепочки.
  2. Держи счётчик длины k и помни, какой символ обязан идти следующим: он определяется остатком от деления k на 3 — за X идёт Y, за Y идёт Z, за Z снова X.
  3. Если очередной символ не совпадает с ожидаемым, цепочка обрывается, но новый символ 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)

Типичные ошибки

Решить это задание в тренажёре

В тренажёре: подсказки по шагам, разбор твоей ошибки ИИ-репетитором (он не даёт готовый ответ), повторение ошибок по интервалам и общий прогресс. Все задания №24 по информатике