Тема 24. Программирование - Обработка символьной информации
24.04 Программирование - Обработка символьной информации
Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела программирование - обработка символьной информации
Решаем задачу:

Ошибка.
Попробуйте повторить позже

Задача 1#29913

Текстовый файл состоит не более чем из 106  заглавных букв латинского алфавита. Найдите последовательность максимальной длины, где символы идут в порядке «больше», «меньше», «больше», «меньше» и т.д. по таблице ASCII. Пример подходящей последовательности: BABACADB  .

Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_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 = 0
    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)

Ответ: 32

Специальные программы

Все специальные программы

Программа
лояльности v2.0

Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!

Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное обучение
в Школково

Для детей ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Брянской областей, а также школьникам, находящимся в пунктах временного размещения Крыма обучение на платформе бесплатное.

Налоговые вычеты

Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей

Бесплатный доступ к любому курсу подготовки к ЕГЭ или олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ

Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!

cyberpunkMouse
cyberpunkMouse
Рулетка
Вы можете получить скидку в рулетке!