Форум » Обработка символьных строк » (№ 4208) (А. Кузнецов) » Ответить

(№ 4208) (А. Кузнецов)

timson_00: Здравствуйте. Возникла сложность с данной задачей. Код написан, но он работает долго и ответ не сходится. В чём ошибка? (№ 4208) (А. Кузнецов) Текстовый файл 24-174.txt состоит не более чем из 106 символов и содержит только заглавные буквы латинского алфавита (ABC…Z). Файл разбит на строки различной длины. Замкнутой цепочкой называется подстрока (часть одной строки файла) длиной не менее трёх символов, которая начинается и заканчивается на одну и ту же букву, но внутри этих букв не содержит. Нужно определите длину самой длинной замкнутой цепочки в строках, содержащих менее 30 букв R, а также общее количество замкнутых цепочек во всех таких строках. Пример. Исходный файл PRIVET INFORMATIKA AWERTYUIOPAZXCA В этом примере во всех строках меньше 30 букв R. В третьей строке повторяются буквы А с порядковыми номерами 1, 11, 15. Самое большое расстояние будет между позициями 1 и 11. В ответе для данного примера нужно вывести число 10 (наибольшее расстояние) и 4 (число замкнутых цепочек: INFORMATI, ATIKA, AWERTYUIOPA, AZXCA). [pre2] def word_count(line): c = 0 max_c = 0 k = 0 for i in range(len(line) - 2): for j in range(i + 2, len(line)): if line == line[j] and line[i:j+1].count('R') < 30 and k < 1 and line != line[i+1]: d = len(line[i:j+1]) c += d if max_c < d: max_c = d k += 1 elif k >= 1: break k = 0 return(c, max_c) file = open('24-174.txt') line = file.readline() max_len = 0 count = 0 i = 0 while True: if not line: break line.strip() d = word_count(line) count += d[0] print(i, line[:15]) if d[1] > max_len: max_len = d[1] line = file.readline() i += 1 print(max_len, count) [/pre2]

Ответов - 4

zachto: У вас в корне неверное решение, внимательней читайте условие. [pre2] def word_count(line): c = 0 max_c = 0 for i in range(len(line) - 2): if line.count('R') < 30: for j in range(i + 2, len(line)): if line[ i] == line[j ] and line[(i + 1):j].count(line[i ]) == 0: d = j - i c += 1 if max_c < d: max_c = d return (c, max_c) file = open('24-174.txt') line = file.readline() max_len = 0 count = 0 while True: if not line: break line.strip() d = word_count(line) count += d[0] if d[1] > max_len: max_len = d[1] line = file.readline() print(max_len, count) [/pre2]

timson_00: понял. Спасибо

Fett: может ли данный код подойти под решение? f1 = open('242.txt').readlines() dlina, maxim, k = 0, 0, 0 s = [] for f in f1: for i in range(0, len(f)): for j in range(2, len(f)): if f[i] == f[j] and (f[i] not in f[i+1:j]) and (f[j] not in f[i+1:j]): s.append(f[i:j]+f[j]) print(s) s1 = [] for i in s: if len(i) > 2 and i.count('R')<30: s1.append(i) k+=1 dlina = len(i) maxim = max(dlina,maxim ) print(maxim, k)


Ж: Вот компактный и простой код: [pre2] s=[c for c in open('24-174.txt').readlines()] l=[] for c in s: if c.count('R') <30: while len(c)>0: n = c.find(c[0],1) if n>=2 : l.append(c[:n+1]) c=c[1::] print(len(max(l,key=len)),len(l)) [/pre2]



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