@Vova135798

В чем ошибка моего решения?

Нужно решить задачу: Текстовый файл состоит не более чем из 106 символов X, Y и Z. Определите максимальную длину цепочки вида XYZXYZXYZ... (составленной из фрагментов XYZ, последний фрагмент может быть неполным). Для выполнения этого задания следует написать программу. Ниже приведён файл, который необходимо обработать с помощью данного алгоритма. Ссылка на файл:https://inf-ege.sdamgia.ru/doc/inf/zadanie24/24_de...

Почему-то мое решение выдает неправильный ответ
with open("text.txt", "r") as file:
    s = file.readline()
    k = 1
    kmax = 1
    for i in range(1, len(s)):
        if s[i] != s[i-1]:
            k = k + 1

            if k > kmax :
                kmax = k

        else:
            k = 1

print(kmax)

правильный ответ 13
  • Вопрос задан
  • 2981 просмотр
Решения вопроса 1
MinTnt
@MinTnt
with open('text.txt', 'r') as f:
	import re
	print(max([len(i[0]) for i in re.findall('((XYZ)+(X|XY)?)', f.read())]))

Это с учётом условия
"последний фрагмент может быть неполным"

т.е. я понял он может быть просто как 'XY, 'X'. По итогу вышло, что максимальная длина цепочки 13. Значит она будет иметь примерный вид как "XYZXYZXYZXYZX".

Только мне чуть кажется, что я точно что-то не правильно задал в условии для поиска, ну.. если что призову всезнающего.

Update: Хах, я ток ща перечитывая условие, заметил заметку "правильный ответ 13"
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Вам надо искать цепочки XYZXYZ, а вы ищете цепочки, где следующий символ не совпадает с предыдущим. То есть цепочка XYXY вашей программой тоже будет найдена.
Ответ написан
@NicolayChe
Может быть как-то так

with open("text.txt", "r") as file:
    s = file.readline()
    k = 0
    kmax = 0
    for i in range(1, len(s)-3):
        if s[i:i+3] == 'XYZ':
            k = k + 1
            i+=2

            if k > kmax :
                kmax = k

        else:
            k = 0

print(kmax)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы