№ 7853 Danov2304 (Уровень: Сложный) А.Богданов
Текстовый файл состоит из символов латинского алфавита и десятичных цифр. Определите максимальное количество идущих подряд символов, среди которых любые два символа из набора N,O,T
в различных комбинациях(с учётом повторений) не стоят через один символ (который может быть любым).
Например, ТEN
или NUТ
не могут быть в искомой подстроке.
Файлы к заданию: 24.txt
Комментарии к первому варианту решения:
import itertools
- мы импортируем модуль itertools, который содержит функции для работы со списками и итераторами.s = open('24.txt').readline()
- здесь мы открываем файл 24.txt
с помощью функции open()
и читаем первую и единственную строку файла с помощью метода readline()
, присваивая результат переменной s
.maxi = 0
- это переменная, которая будет использоваться для хранения максимального значения длины строки.M = []
- это пустой список, который будет использоваться для хранения всех возможных комбинаций строк.for i in itertools.product('QWERTYUIOPASDFGHJKLZXCVBNM0123456789', repeat = 3):
- здесь мы используем функцию product()
из модуля itertools, чтобы создать все возможные комбинации из заданных символов длиной 3. Результатом является итератор, который мы будем использовать в следующей строке кода.r = ''.join(i)
- здесь мы объединяем символы из кортежа i
, созданных ранее с помощью функции product()
, в одну строку r
с помощью метода join().if r[0] in 'NOT' and r[2] in 'NOT':
- здесь мы проверяем, что символы r[0]
и r[2]
находятся в строке 'NOT'
с помощью оператора in
. Если да, то мы добавляем строку r
в список M
.for x in M:
- здесь мы перебираем список M
.s = s.replace(x, ' ')
- здесь мы заменяем все вхождения строки x в строке s
на пробелы с помощью метода replace()
.maxi = max([len(i) for i in s.split()])
- здесь мы разделяем строку s на слова с помощью метода split() и находим максимальную длину слова в этом списке с помощью функции max(
). Результат присваивается переменной maxi
.print(maxi)
- здесь мы выводим значение переменной maxi на экран.