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

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

Задача 1#88144

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

Вложения к задаче
Показать ответ и решение
s = open(’24_M2.txt’).readline()
count = 0
for i in range(len(s)-3):
    if (s[i] == s[i+3] and s[i+1] != s[i+2]) or (s[i] != s[i+3] and s[i+1] == s[i+2]):
        #нам подходят два случая: когда первый и последний символы совпадают, а второй и третий - нет,
        #и когда первый и последний символы не совпадают, а второй и третий - да.
        #Только в таких случаях мы можем образовать палиндром заменой ровно одного символа.
        count += 1
print(count)

Ответ: 73794

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

Задача 2#82928

Текстовый файл состоит из символов, обозначающих заглавные буквы латинского алфавита и цифры от 1 до 9 включительно. В файле перемешались числа 16сс с буквами. Нужно определить количество различных чисел, которые в 10сс больше 132.

Примечание: все числа заключены между буквами или между буквой и началом или концом строки.

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

m = ’QWRTYUIOPSGHJKLZXVNM’

for i in m:
    s = s.replace(i,’*’)
s = s.split(’*’)
num = [x for x in s if len(x) > 0 and int(x,16) > 132]
print(len(set(num)))

Ответ: 204512

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

Задача 3#82927

Текстовый файл состоит из символов, обозначающих заглавные буквы латинского алфавита и цифры от 1 до 9 включительно. Определите количество подстрок, начинающихся с цифры, большей 0, за которой следуют буквы, причём количество букв равно цифре, с которой начинается подстрока.

Вложения к задаче
Показать ответ и решение
s = open(’24_12946.txt’).readline()
digits = ’0123456789’
count = 0
words = []
for i in range(len(s)):
    # Чтобы иметь возможность проверить подстроки в конце строки, воспользуемся
    # контролируемым блоком кода, чтобы избежать ошибки выхода за границы индексации
    try:
        if s[i] in digits and int(s[i]) > 0:
            if all(s[j] not in digits for j in range(i + 1, i + int(s[i]) + 1)):
                count += 1
                words += [s[i:i + int(s[i]) + 1]]
    except IndexError:
        pass
print(len(words))

Ответ: 745819

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

Задача 4#82926

Текстовый файл состоит из символов, обозначающих заглавные буквы латинского алфавита и цифры от 1 до 9 включительно. Определите количество различных чисел в файле, у которых ровно 6 нетривиальных делителей.

Примечание: все числа заключены между буквами или между буквой и началом или концом строки. Таким образом в строке ABC123D лишь одно число - 123.

Вложения к задаче
Показать ответ и решение
def divs(x):
    d =set()
    for i in range(2,int(x**0.5)+1):
        if x % i == 0:
            d |= {i,x//i}
    return sorted(d)
f = open(’24_12946.txt’).readline().strip()
for i in ’QWERTYUIOPASDFGHJKLZXCVBNM’:
    f = f.replace(i,’*’)
f = f.split(’*’)
numb = [x for x in f if len(x) > 0 and len(divs(int(x))) == 6]
print(len(set(numb)))

Ответ: 5301

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

Задача 5#82925

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

Примечание: все числа заключены между буквами или между буквой и началом или концом строки. Так для строки ABC13D ответом будет 1.

Вложения к задаче
Показать ответ и решение
def simple(x):return x > 1 and all(x % y for y in range(2,int(x**0.5)+1))
f = open(’24_12946.txt’).readline().strip()
for i in ’QWERTYUIOPASDFGHJKLZXCVBNM’:
    f = f.replace(i,’*’)
f = f.split(’*’)

simple_numbers = [x for x in f if len(x) > 0 and simple(int(x))]
print(len(simple_numbers))

Ответ: 797391

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

Задача 6#82924

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

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

Ответ: 2

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

Задача 7#82923

Текстовый файл содержит только заглавные буквы латинского алфавита (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

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

Задача 8#82922

Текстовый файл содержит только заглавные буквы латинского алфавита (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

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

Задача 9#80888

Текстовый файл состоит из символов 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

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

Задача 10#80877

Текстовый файл 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

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

Задача 11#78383

В текстовом файле 8.txt. находится цепочка из символов латинского алфавита A, B, C, D, E. Найдите длину самой длинной подцепочки, не содержащей сочетания DA.

Вложения к задаче
Показать ответ и решение
s = open(’24-2.txt’).readline().replace(’DA’,’D A’).split(’ ’)
mx = 0
for i in s:
    if len(i) > mx:
        mx = len(i)
print(mx)

Ответ: 212

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

Задача 12#78382

Текстовый файл 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

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

Задача 13#74709

В текстовом файле 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

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

Задача 14#70014

В текстовом файле находится цепочка из символов латинского алфавита A, B, C, D, E, F. Найдите длину самой длинной подцепочки, состоящей из символов A, C, D (в любом порядке).

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

Вложения к задаче
Показать ответ и решение
s = open(’24_5.txt’).readline()
s = s.replace(’B’, ’ ’)
s = s.replace(’E’, ’ ’)
s = s.replace(’F’, ’ ’)
count = 0
for i in s.split():
    count = max(count, len(i))
print(count)

Ответ: 14

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

Задача 15#70013

Текстовый файл состоит из символов 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

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

Задача 16#70012

Текстовый файл состоит из заглавных букв латинского алфавита. Определите максимальное количество подряд идущих символов, среди которых нет сочетания 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

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

Задача 17#70011

Текстовый файл состоит из символов 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

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

Задача 18#70010

Текстовый файл состоит из символов 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

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

Задача 19#63751

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

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

В ответ запишите наименьшее необходимое количество букв «a», а если строку s невозможно сделать палиндромом проделывая описанную операцию — запишите в ответ − 1  .

Вложения к задаче
Показать ответ и решение

Оптимальное решение: проверим, что вся строка s  не состоит только из букв «a», потому что если она состоит, то она уже является палиндромом и ответ 0  . Иначе подсчитаем количество букв «a» стоящих в начале строки s  и количество букв «a» стоящих в конце строки. Если в конце строки стоит меньше букв «a», чем в начале, то добавляя буквы «a» в начало вы точно не сделаете строку палиндромом, поэтому ответ − 1  . Иначе, давайте добавим необходимое количество букв «a» в начало строки и после этого проверим, что полученная строка является палиндромом. Такое решение работает за три прохода по строке, то есть за O (N  + N + N) = O(N )  .

Решение на Python

f = open("24.txt")
s = f.readline()
if len(s) == s.count("a"):
    print(0)
else:
    l, r = 0, 0
    i = 0
    while s[i] == "a" and i < len(s):
        l += 1
        i += 1
    i = len(s) - 1
    while s[i] == "a" and i >= 0:
        r += 1
        i -= 1
    if l > r:
        print(-1)
    else:
        s = "a" * (r - l) + s
        # проверка строки на палиндромность
        f = True
        for i in range(len(s) // 2):
            if s[i] != s[len(s) - i - 1]:
                f = False
        if f:
            print(r - l)
        else:
            print(-1)

Ответ: 1528272

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

Задача 20#63750

Текстовый файл состоит не более чем из 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
Рулетка
Вы можете получить скидку в рулетке!