Автор | Сообщение |
|
Отправлено: 18.12.23 14:52. Заголовок: 24 номер 208. Вопрос по решению
Здравствуйте в задаче 24_208 208) (М. Шагитов) Текстовый файл 24-208.txt содержит строку из десятичных цифр, всего не более чем из 106 символов. Определите максимальное количество идущих подряд символов, среди которых комбинация символов 2022 повторяется не более четырёх раз. В решениях приводится алгоритм # Автор: А. Гнедов s = open('24-208.txt').readline() # s = '1' * 500 + '2022022333' * 8 + '4' * 1000 ans = 0 pos = 0 # первая позиция, входящая в последовательность sub = '2022' buf = [0] * 5 while True: pos = s.find(sub, buf[-1]) if pos == -1: ans = max(ans, len(s) - buf[0]) break else: ans = max(ans, pos - buf.pop(0) + 3) buf.append(pos + 1) print(ans) Получатся, что прибавляется +3 только хвост 2022. Но можно же брать 2_02244444202_2 начало и хвост от 2022 f = open('Q3_4.txt') s = f.readline().replace('2022','a') a = s.split('a') mx = 0 for i in range(len(a)-4): x = 'xxxx'.join(a[i:i+5]) if not(i==0 and s[0]!='a'): x='xxx'+x if not(i==len(a)-5 and s[-1]!='a'): x=x +'xxx' mx = max(mx,len(x)) print(mx)
|
|
|
Ответов - 2
[только новые]
|
|
|
Отправлено: 27.12.23 23:15. Заголовок: Вы делаете replace, ..
Вы делаете replace, но у вас внутри могут быть пересекающиеся комбинации. Например, 2022022, и это уже считается за 2 раза.
|
|
|
|
Отправлено: 29.12.23 22:01. Заголовок: Это код, который пок..
Это код, который показывает нужную строку и доказывает, что длиннее нет f=open('D:/24-208.txt') s=f.readline() for k in range(2502,2504): for i in range(len(s)-k): if s[i:i+k].count('2022')<=4: print(k,'нашлась строка: ',s[i:i+k] ) break else: print(k,'не нашлась строка') Вот код, который задачу решает f=open('D:/24-208.txt') s=f.readline() while '2022' in s: s=s.replace('2022','202 022') s=[len(c) for c in s.split()] print(max(sum(s[i:i+5]) for i in range(len(s)-5))-4*2)
|
|
|
|