(Иглин К.)
Текстовый файл состоит из десятичных цифр и заглавных букв латинского алфавита.
Определите в прилагаемом файле последовательность из максимального количества идущих подряд символов, удовлетворяющую условию: в ней ровно 80 отдельных слов (слова — это последовательности подряд идущих букв, отделённые друг от друга хотя бы одной цифрой).
В ответе запишите число — порядковый номер в файле первого символа найденной последовательности.
Для выполнения этого задания следует написать программу.
Примечание.
В прилагаемом файле нумерация символов начинается с нуля.
Решение
Двойной цикл
🔹 Шаг 1. Читаем файл в строку и описываем функцию word_count: она считает слова
s = open("24.txt").read()
n = len(s)
📌 Читаем файл в строку и описываем функцию word_count: она считает слова — последовательности подряд идущих букв, разделённые цифрами.
🔹 Шаг 2. Задаём переменные для лучшей длины отрезка и стартовой позиции ответа.
def word_count(left, right):
cnt = 0
in_word = False
for i in range(left, right + 1):
if s[i].isalpha():
if not in_word:
cnt += 1
in_word = True
else:
in_word = False
return cnt
📌 Задаём переменные для лучшей длины отрезка и стартовой позиции ответа.
🔹 Шаг 3. Перебираем все пары границ left и right
best_len = 0
best_start = 0
for left in range(n):
📌 Перебираем все пары границ left и right: для каждого отрезка считаем число слов.
🔹 Шаг 4. Если слов больше 80, дальше расширять отрезок не нужно; при ровно 80…
for right in range(left, n):
words = word_count(left, right)
if words > 80:
break
if words == 80:
cur_len = right - left + 1
if cur_len > best_len:
best_len = cur_len
best_start = left
📌 Если слов больше 80, дальше расширять отрезок не нужно; при ровно 80 словах обновляем максимальную длину и запоминаем left.
🔹 Шаг 5. Жми RUN
print(best_start)
📌 Жми RUN — в выводе будет 2576273 (номер первого символа самой длинной подходящей последовательности).
✅ Ответ: 2576273
🔹 Полный код
s = open("24.txt").read()
n = len(s)
def word_count(left, right):
cnt = 0
in_word = False
for i in range(left, right + 1):
if s[i].isalpha():
if not in_word:
cnt += 1
in_word = True
else:
in_word = False
return cnt
best_len = 0
best_start = 0
for left in range(n):
for right in range(left, n):
words = word_count(left, right)
if words > 80:
break
if words == 80:
cur_len = right - left + 1
if cur_len > best_len:
best_len = cur_len
best_start = left
print(best_start)