Форум » Обработка символьных строк » Задача 24.220.5392 ответ не сходится? » Ответить

Задача 24.220.5392 ответ не сходится?

inkonstruktor@yandex: Решил задачи 5387 по 5391 с похожей формулировкой, однако у них шаблон другой. Ответ все совпали, а вот задача 5392 не сходиться? [pre2] var p:='A1A'; var s:=ReadAllText('24-215.txt'); s:=s.Replace('B','A').Replace('C','A'); s:=s.Replace('2','1').Replace('3','1'); s:=s.Replace(p,'*'); s:=s.Replace('A',' '); s:=s.Replace('1',' '); s.Split().Select(t->t.length).max.Println; //WriteAllText('123.txt',s); [/pre2] Ответ получается 4, а на сайте 5. В чём может быть проблема?

Ответов - 9

Поляков: Попробуйте такую строку: s := 'A1C2CB3CA3BA2AB3AB'; Для нее нужно получить 5 (C2CB3CA3BA2AB3A), а ваша программа выдает 4.

L4043: Я тоже решала получается 4, ошибку не могу найти. Для вашей строки моя программа выводит 5 [pre2]'''Текстовый файл 24-215.txt содержит строку из символов A, B, C и цифр 1, 2, 3, всего не более чем 106 символов. Определите максимальное количество идущих подряд троек символов вида «буква + цифра + буква».''' with open('24.txt') as f: s = f.readline() k = 0 count = 0 i = 2 while i < len(s): if s[i-2].isalpha() and not(s[i-1].isalpha()) and s[ i].isalpha(): k += 1 i += 3 else: i += 1 count = max(count, k) k = 0 count = max(k, count) print(count) [/pre2]

Поляков: L4043 пишет: Я тоже решала получается 4, ошибку не могу найти. Для вашей строки моя программа выводит 5 Ваша программа ломается на строке s = 'A2A1CB2С' Получаем ответ 1, а правильный ответ - 2 (A1CB2С). Пусть вы нашли нужную тройку. Далее вы не учитываете, что самая длинная цепочка может начинаться с последнего символа этой тройки.


L4043: Спасибо!

z1gor: L4043 пишет: Спасибо! Я что то вообще не понял как это решать. Поделись пожалуйста правильным кодом

Галина Попова: Поляков пишет: A2A1CB2D Константин Юрьевич, буквы D нет в условии.

Поляков: Галина Попова пишет: буквы D нет в условии. Да, согласен. Но суть ответа сохраняется. Для строки A2A1CB2С программа работает неверно и это вскрывает ошибку.

Майкл Джордан: with open('24-215.txt') as f: s = f.readline() lent = 0 maxlent = 0 i = 0 stroka = '' while i <= len(s) - 3: if s[i] in 'ABC' and s[i + 1] in '123' and s[i + 2] in 'ABC': stroka += s[i] + s[i + 1] + s[i + 2] i += 3 lent += 1 if lent > maxlent: maxlent = lent a = stroka elif lent == 0 and s[i + 3] in '123' and s[i + 2] in 'ABC' and s[i + 4] in 'ABC': i += 2 lent += 1 if lent > maxlent: maxlent = lent a = stroka else: stroka = '' i += 1 lent = 0 print(maxlent, a) Я получаю ответ 5, который и нужен. Но верен ли мой код?

Ж: Предлагаю такой короткий код: [pre2] s=open('4-215.txt').readline() k=maxi=0 for start in range(3): for i in range(start,len(s)-3,3): if s[ i].isalpha() and s[ i+1].isdigit() and s[ i+2].isalpha(): k+=1 else: maxi=max(maxi,k); k=0 print(maxi) [/pre2]



полная версия страницы