Текстовый файл состоит не более чем из заглавных букв латинского алфавита. Найдите последовательность максимальной длины, где символы идут в порядке «больше», «меньше», «больше», «меньше» и т.д. по таблице ASCII. Пример подходящей последовательности:
.
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом «Задание_41_ДЗ». В ответе запишите длину искомой последовательности.
Решение 1.
s = open("Задание_41_ДЗ__tcne.txt").read()
counter = 1
fl = True # Ждем больше
ans = 0
for i in range(len(s) - 1):
if s[i] > s[i + 1] and fl:
# Ждали больше, нашли больше
counter += 1
fl = False # Ждем меньше
elif s[i] < s[i + 1] and not fl:
# Ждали меньше, нашли меньше
counter += 1
fl = True # Ждем больше
elif s[i] > s[i + 1] and not(fl):
# Ждали меньше, нашли больше (получается больше больше)
# Для ситуации CBAB, ждали меньше, получили больше, учитываем
# вторую пару больше как начало новой последовательности,
# флаг можно не менять, так как он уже ждет меньше
counter = 2
elif s[i] < s[i + 1] and fl:
# Ждали больше, нашли меньше
# Флаг можно не менять, так как он уже ждет меньше
counter = 1
else:
counter = 1
ans = max(counter, ans)
print(ans)
Решение 2. В данном решении надо отдельно рассмотреть последний символ глазами.
with open(’Задание_41_ДЗ.txt’) as f:
text = f.read().strip()
max_seq_len = 0
for i in range(len(text)):
seq_len = 1
for j in range(i+1, len(text)):
if (j-i) % 2 == 1 and ord(text[j]) > ord(text[j-1]) or
(j-i) % 2 == 0 and ord(text[j]) < ord(text[j-1]):
seq_len += 1
else:
break
max_seq_len = max(max_seq_len, seq_len)
print(max_seq_len+1)
Решение 3.
with open(’Задание_41_ДЗ.txt’) as f:
text = f.read().strip() + "-"
seq_len = 1
max_seq_len = 0
for i in range(1, len(text) - 1, 2):
if text[i - 1] > text[i] < text[i + 1] and text[i + 1] != "-":
seq_len += 2
max_seq_len = max(max_seq_len, seq_len)
else:
if text[i - 1] > text[i]:
seq_len += 1
max_seq_len = max(max_seq_len, seq_len)
seq_len = 1
for i in range(2, len(text) - 1, 2):
if text[i - 1] > text[i] < text[i + 1] and text[i + 1] != "-":
seq_len += 2
max_seq_len = max(max_seq_len, seq_len)
else:
if text[i - 1] > text[i]:
seq_len += 1
max_seq_len = max(max_seq_len, seq_len)
seq_len = 1
print(max_seq_len)