Тема 24. Обработка символьной информации

24.03 Прочие прототипы

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

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

Задача 61#63750Максимум баллов за задание: 1

Текстовый файл состоит не более чем из 106  символов ’(’ и ’)’. Известно, что правильная скобочная последовательность берет начало в начале файла. Вам необходимо узнать какую максимальну длину имеет правильная скобочная последовательность. Правильная скобочная последовательность - последовательность скобок, которая подчиняется нескольким правилам:

1) Последовательность начинается с открывающейся скобки

2) Каждая открывающаяся скобка имеет в пару закрывающаяся скобку

3) Количество открывающихся скобок в любой точке скобочной последовательности больше либо равно количеству закрывающихся

Примеры правильных скобочных последовательностей: ()()()  , ()(()())  .

Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "24-4.txt". В ответе запишите длину искомой последовательности.

Вложения к задаче
Показать ответ и решение
f = open(’24-4.txt’)
s = f.read()
count_left = 1
count_right = 0
for i in range(1, len(s)):
    if s[i] == ’(’:
        count_left += 1
    else:
        if count_left > count_right:
            count_right += 1
        else:
            break
print(count_right + count_left)

Ответ: 9064

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

Задача 62#63751Максимум баллов за задание: 1

В единственной строке файла 24-5.txt находится строка s  состоящая не более чем из 107  маленьких букв английского алфавита. Определите можно ли добавить некоторое (возможно нулевое) количество латинских букв в начало строки, чтобы строка в итоге стала палиндромом.

Напомним вам, что палиндромом называются строки, которые читаются одинаково как слева-направо, так и справа-налево.

В ответ запишите наименьшее необходимое количество латинских букв.

Вложения к задаче
Показать ответ и решение
S = open("24-5.txt").readline()

ans = -1  # Переменная для ответа
for i in range((len(S) + 1) // 2 - 1, -1, -1):  # Перебор "середины" строки
    chet = True  # Переменная-флаг для палиндрома чётной длины
    nechet = True  # Переменная-флаг для палиндрома нечётной длины
    for j in range(i + 1):  # Перебираем зеркальные символы для проверки палиндрома

        if S[i - j] != S[i + j]:  # Симметрия для нечётной длины нарушена
            nechet = False

        if 2 * i + 1 == len(S):  # Изначально i не может являться серединой строки с чётной длиной
            chet = False
        elif S[i - j] != S[i + j + 1]:  # Симметрия для чётной длины нарушена
            chet = False

        if nechet == False and chet == False:
            break

    if chet:  # Для текущего i можно получить палиндром чётной длины
        ans = len(S) - 2 * (i + 1)
        break
    elif nechet:  # Для текущего i можно получить палиндром нечётной длины
        ans = len(S) - 2 * i - 1
        break

print(ans)

Ответ: 592123

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

Задача 63#63869Максимум баллов за задание: 1

Текстовый файл 1-3.txt состоит не более чем из 106  заглавных латинских букв (A..Z). Текст разбит на строки различной длины. Определите количество строк, в которых буква N встречается реже, чем буква B.

Вложения к задаче
Показать ответ и решение
f = open(’1-3.txt’)
a = 0
for s in f:
    if(s.count(’N’) < s.count(’B’)):
        a += 1
print(a)

Ответ: 483

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

Задача 64#63871Максимум баллов за задание: 1

Текстовый файл 1-3.txt состоит не более чем из 106  заглавных латинских букв (A..Z). Текст разбит на строки различной длины. Определите количество строк, в которых комбинация SY встречается больше двух раз.

Вложения к задаче
Показать ответ и решение
f = open(’1-3.txt’)
a = 0
for s in f:
    if(s.count(’SY’)>2):
        a += 1
print(a)

Ответ: 185

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

Задача 65#63872Максимум баллов за задание: 1

Текстовый файл 1-3.txt состоит не более чем из 106  заглавных латинских букв (A..Z). Текст разбит на строки различной длины. Определите количество строк, в которых встречается комбинация T**O, где звёздочка обозначает любой символ.

Вложения к задаче
Показать ответ и решение
f = open(’1-3.txt’)
text = []
count = 0
for i in range(1000):
    text.append(f.readline())
for i in range(len(text)):
    for j in range(len(text[i]) - 3):
        if text[i][j] == ’T’ and text[i][j + 3] == ’O’:
            count += 1
            break
print(count)

Ответ: 749

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

Задача 66#63873Максимум баллов за задание: 1

Текстовый файл 4.txt состоит не более чем из 106  заглавных латинских букв (A..Z). Файл разбит на строки различной длины. В строках, содержащих более 64 букв R, нужно определить и вывести максимальное расстояние между одинаковыми буквами в одной строке.

Вложения к задаче
Показать ответ и решение
f = open("4.txt")
p = f.readlines()
maxi = 0
a = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
for j in p:
    for i in a:
        if j.rfind(i) - j.find(i) > maxi and j.count("R") > 64:
            maxi = j.rfind(i) - j.find(i)
print(maxi)

Ответ: 965

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

Задача 67#63879Максимум баллов за задание: 1

В текстовом файле 9.txt находится цепочка из символов латинского алфавита A, B, C, D, E. Найдите третье вхождение подцепочки ”CEADD” и запишите в ответе букву, которая стоит после этой подцепочки.

Вложения к задаче
Показать ответ и решение
f = open(’9.txt’)
s = f.readline()

k = 0
for i in range (0, len(s)-4):
    if s[i] == ’C’:
        if s[i+1] == ’E’:
            if s[i+2] == ’A’:
                if s[i+3] == ’D’:
                    if s[i+4] == ’D’:
                        k += 1
    if k == 3:
        print(s[i+5])
        break

Ответ: B

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

Задача 68#63988Максимум баллов за задание: 1

В текстовом файле 1.txt находится цепочка из символов латинского алфавита A, B, C, D, E. Найдите второе вхождение подцепочки ”DEBAC” и запишите в ответе позицию, с которой она начинается. Отсчёт позиции начинается с 1.

Вложения к задаче
Показать ответ и решение
f = open(’1.txt’)
s = f.readline()

k = 0
for i in range (0, len(s)-4):
    if s[i] == ’D’:
        if s[i+1] == ’E’:
            if s[i+2] == ’B’:
                if s[i+3] == ’A’:
                    if s[i+4] == ’C’:
                        k += 1
    if k == 2:
        print(i+1)
        break

Ответ: 9807

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

Задача 69#63993Максимум баллов за задание: 1

Текстовый файл 6.txt содержит последовательность из строчных и заглавных букв английского алфавита и цифр, всего не более 106  символов. Запишите в ответе номер символа, с которого начинается наибольшая убывающая подпоследовательность. Убывающей подпоследовательностью будем называть последовательность символов, расположенных в порядке уменьшения их номера в кодовой таблице символов ASCII. Нумерация символов начинается с 1. Если таких последовательностей несколько, используйте последнюю из них.

Вложения к задаче
Показать ответ и решение
f = open(’6.txt’)
s = f.readline()

count = 1
maxi = 0
nomer = 0
nomermax = 0
for i in range (1,len(s)):
    if ord(s[i])<ord(s[i-1]):
        if count ==1:
            nomer = i
        count+=1
        if count >= maxi:
            maxi = count
            nomermax = nomer
    else:
        count = 1

print(nomermax)

Ответ: 44701

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

Задача 70#63996Максимум баллов за задание: 1

В текстовом файле 9.txt находится цепочка из цифр. Преобразуйте строку, так чтобы подцепочки из одинаковых элементов были заменены на подцепочку из одного символа. Например, если часть строки выглядит так “111322114444”, то она заменится на “13214”. В ответе запишите сумму всех элементов преобразованной цепочки.

Вложения к задаче
Показать ответ и решение
f = open (’9.txt’)
s = f.readline()

k = ’’
for i in range (0,len(s)-1):
    if s[i] != s[i+1]:
        k += s[i]

k += s[-1]
summa = 0
for x in k:
    summa += int(x)
print(summa)

Ответ: 39505

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

Задача 71#70010Максимум баллов за задание: 1

Текстовый файл состоит из символов A, C, D, F и U. Определите максимальное количество идущих подряд символов, среди которых не более 3 пар вида гласная + согласная в прилагаемом файле. В ответ запишите количество найденных символов.

Вложения к задаче
Показать ответ и решение
s = open(’24_1.txt’).readline()
s = s.replace(’A’, ’U’).replace(’F’,’C’).replace(’D’, ’C’)
s = s.replace(’UC’,’U C’).split()
m = 0
for i in range(len(s)-3):
    s1 = s[i] + s[i+1] + s[i+2] + s[i+3]
    if len(s1) > m:
        m = len(s1)
print(m)

Ответ: 19

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

Задача 72#70011Максимум баллов за задание: 1

Текстовый файл состоит из символов A, B, C. Определите максимальную длину подпоследовательности подряд идущих символов, состоящую из троек вида гласная + согласная + согласная.

В ответе запишите одно число – значение найденной длины.

Вложения к задаче
Показать ответ и решение
s = open(’24_2.txt’).readline()
s = s.replace(’ABB’, ’X’).replace(’ABC’, ’X’).replace(’ACB’, ’X’).replace(’ACC’, ’X’)
m = 0
mmax = 0
for i in s:
    if i == ’X’:
        m += 1
        if m > mmax:
            mmax = m
    else:
        m = 0
print(mmax*3)

Ответ: 6

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

Задача 73#70012Максимум баллов за задание: 1

Текстовый файл состоит из заглавных букв латинского алфавита. Определите максимальное количество подряд идущих символов, среди которых нет сочетания KK, но есть сочетание FM.

В ответ запишите количество найденных символов.

Вложения к задаче
Показать ответ и решение
s = open(’24_3.txt’).readline()
while ’KK’ in s:
    s = s.replace(’KK’, ’K K’)
n = 0
for i in s.split():
    if ’FM’ in i:
        n = max(n, len(i))
print(n)

Ответ: 3203

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

Задача 74#70013Максимум баллов за задание: 1

Текстовый файл состоит из символов A, B и цифр 1, 2. Определите максимальное количество идущих подряд четверок символов вида буква + двухзначное число + буква.

В ответ запишите количество найденных четверок.

Вложения к задаче
Показать ответ и решение
s = open(’24_4.txt’).readline()
s = s.replace(’A’, ’B’).replace(’1’, ’2’)
s = s.replace("B22B22B", "B22B B22B")
s = s.replace(’B22B’, ’*’).replace(’2’, ’ ’).replace(’B’, ’ ’)
print(max(len(i) for i in s.split()))

Ответ: 5

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

Задача 75#74709Максимум баллов за задание: 1

В текстовом файле 3.txt находится цепочка из символов латинского алфавита A, B, C, D, E, F. Найдите четвертое вхождение подцепочки «DFAAB» и запишите в ответе букву, которая стоит перед этой подцепочкой.

Вложения к задаче
Показать ответ и решение
f = open(’3.txt’)#чтение файла
a = f.readline()
a = a.replace(’DFAAB’, ’*’, 4) #меняем первые 4
print(a[a.rfind(’*’)-1])

Ответ: A

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

Задача 76#78382Максимум баллов за задание: 1

Текстовый файл 1.txt содержит строку из заглавных латинских букв D, G и С, всего не более чем из 106  символов. Определите максимальное количество идущих подряд троек символов CGG или DDG.

Вложения к задаче
Показать ответ и решение
#Решение через replace
f = open(’1.txt’)
s = f.readline()

#Заменяем CGG и DDG на *
s = s.replace(’CGG’,’*’).replace(’DDG’,’*’)

#Запускаем цикл,который проверяет есть ли в строке i подряд идущих троек
for i in range(len(s)):
    if ’*’*i in s:
        print(i)

#Решение через циклы
file = open(’1.txt’)
s = file.read()
max_counter = 0
temp_counter = 0
for start_step in range(3):
    for index in range(start_step, len(s) - len(s) % 3 - 2, 3):
        if s[index:index + 3] == "CGG" or s[index:index + 3] == "DDG":
            temp_counter += 1
            max_counter = max(max_counter, temp_counter)
        else:
            temp_counter = 0
print(max_counter)

Ответ: 4

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

Задача 77#80877Максимум баллов за задание: 1

Текстовый файл 24_10.txt содержит строку из заглавных латинских букв, всего не более чем из 106  символов. Определите количество подстрок длиной не менее 50 и не более 100 символов, которые начинаются и заканчиваются буквой P и не содержат других букв P (кроме первой и последней), а также содержит минимум две буквы I и не содержит букв O.

Вложения к задаче
Показать ответ и решение
f = open(’24_10.txt’)
s = f.readline()
s = s.replace(’P’, ’P P’)
a = s.split()
c = 0
for i in a:
    if (i[0] == ’P’) and (i[-1] == ’P’) and (len(i) >= 50) \
    and (len(i) <= 100) and (i.count(’I’) >= 2) and (not ’O’ in i):
        c += 1
print(c)

Ответ: 2804

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

Задача 78#80888Максимум баллов за задание: 1

Текстовый файл состоит из символов T, U, V, W, X, Y и Z. Определите минимальную длину подстроки, содержащую ровно 70 символов Y.

Для выполнения этого задания следует написать программу.

Вложения к задаче
Показать ответ и решение
f = open(’24_20.txt’)
s = f.readline()
mini = 10**10
count = 0
pos = []
for i in range(len(s)):
    if s[i] == ’Y’:
        pos.append(i)
for j in range(1, len(pos)-69):
    count=pos[j+69] - pos[j] + 1
    if count < mini:
        mini = count
print(mini)

Ответ: 73

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

Задача 79#82922Максимум баллов за задание: 1

Текстовый файл содержит только заглавные буквы латинского алфавита (ABC…Z). Определить количество палиндромов длиной 5, в которых согласных букв больше гласных.

Вложения к задаче
Показать ответ и решение
s = open(’24_13085.txt’).readline()
words = [s[i:i+5] for i in range(len(s)-4) if s[i:i+5] == s[i:i+5][::-1]]
m = ’AEIOUY’
count = 0
for i in words:
    gl = [x for x in i if x in m]
    sogl = [x for x in i if x not in m]
    if len(sogl) > len(gl):
        count += 1
print(count)

Ответ: 1433

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

Задача 80#82923Максимум баллов за задание: 1

Текстовый файл содержит только заглавные буквы латинского алфавита (ABC…Z). Определите количество подстрок, которые могут быть составлены перестановкой букв слова MEOW.

Вложения к задаче
Показать ответ и решение
from itertools import permutations
s = open(’24_13085.txt’).readline()
count = 0
for x in permutations(’MEOW’):
    word = ’’.join(x)
    count += s.count(word)
print(count)

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