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

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

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

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

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

Текстовый файл состоит не более чем из 106  строк, каждая из которых содержит не менее семи и не более чем 102  заглавных букв латинского алфавита. Найдите номер строки (нумерация с 0), которая содержит максимальное количество палиндромов из семи символов. Если таких строк несколько, то в ответе напишите номер первой встретившейся. Палиндром - последовательность символов, которая читается одинаково с двух сторон.

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

Вложения к задаче
Показать ответ и решение
f = open("Задание_44_ДЗ.txt")  
maxim = 0  
find_ind = -1  
ind = 0  
for s in f:  
    count = 0  
    for i in range(len(s) - 6):  
        if s[i:i+7] == s[i:i+7][::-1]:  
            count += 1  
    if count > maxim:  
        maxim = count  
        find_ind = ind  
    ind += 1  
print(find_ind)

 

Ответ: 133

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

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

Текстовый файл состоит не более чем из 106  строк, каждая из которых содержит не менее двух и не более чем 102  букв латинского алфавита. Найдите количество строк палиндромов.

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

Вложения к задаче
Показать ответ и решение
# строка содержит в конце символ переноса ’\n’
# метод str.strip() удаляет этот символ

print(sum(1 for i in open("Задание_45_ВЕБ.txt")
          if i.strip() == i.strip()[::-1]))

Ответ: 582

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

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

Текстовый файл состоит не более чем из 106  заглавных букв латинского алфавита. Гарантируется, что количество символов в строке четное. Вам нужно заменить некоторые латинские буквы на другие таким образом, чтобы из символов строки можно было составить палиндром. Например, для строки AVRORA можно заменить O на V или V на O, тогда из данного набора букв мы сможем составить палиндром.

Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_46_ДЗ". В ответе запишите минимальное количество замен, которые нужно сделать.

Вложения к задаче
Показать ответ и решение
f = open("Задание_46_ДЗ.txt")  
s = f.read()  
# используем индексы буквы в таблице ASCII  
# A - 65, Z - 90  
ar = [0] * 100  
for i in range(len(s)):  
    ar[ord(s[i])] += 1  
# Если какой-то символ встречается нечетное число раз  
# то 1 экземпляр этого символа можно поменять на другой символ,  
# который тоже встречается нечетное число раз  
# так как строка имеет четную длину, если найдется символ,  
# который встречается  
# нечетное число раз, то к нему всегда найдется пара  
ans = 0  
for i in range(65, 91):  
    if ar[i] % 2 == 1:  
        ans += 1  
# мы получили количество символов, которые встретились  
# нечетное число раз,  
# мы можем поменять ровно половину из них, а другую не трогать  
print(ans//2)

 

Ответ: 5

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

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

Текстовый файл состоит не более чем из 104  строк, каждая из которых состоит не более чем из 104  заглавных букв латинского алфавита. В строке, содержащей не менее 150 символов Z  найдите максимальное расстояние (разница в индексах) между двумя одинаковыми символами, между которым не повторяется этот символ. Если строк, содержащих не менее 150 символов Z  несколько, то используйте последнюю из таковых для поиска маскимального расстояния.

Пример:

ABBAC

P REREOOOOOR

QW  ERT Y Q

Среди данных строк нет ни одной, где количесто символов Z  не менее 150. Если забыть про это условие (в рамках примера), то максимальное расстояние между символами R  во второй строке и оно равно 7.

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

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

Решение 1

f = open(’Задание_48_ДЗ__tctn.txt’)
t = ’’
for i in f:
    if i.count(’Z’) >= 150:
        t = i
alf = ’QWERTYUIOPASDFGHJKLZXCVBNM’
ans = 0
for i in range(26):
    m = t.split(alf[i])
    for j in m[1:-1]:
        ans = max(len(j), ans)
print(ans + 1)

Решение 2

f = open("Задание_48_ДЗ.txt")
maxim = 0
alph = sorted(list("qwertyuiopasdfghjklzxcvbnm".upper()))
for s in f:
    s = s.strip()
    last_symbol = [-1] * 26
    if s.count("Z") >= 150:
        maxim = 0
        for i in range(len(s)):
            ind_sym = alph.index(s[i])
            if last_symbol[ind_sym] != -1:
                if i - last_symbol[ind_sym] >= 2:
                    maxim = max(i - last_symbol[ind_sym], maxim)
            last_symbol[ind_sym] = i
print(maxim)

 

Ответ: 274

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

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

Текстовый файл "Задание_49_ДЗ"содержит только заглавные буквы латинского алфавита (ABC...Z). Текст разбит на строки различной длины. Необходимо найти строку, содержащую наибольшее количество пар соседних букв, которые стоят в таком же порядке как и в алфавите (например, AB, BC, CD и т.д.; в цепочке ABC две таких пары). Если таких строк несколько, надо взять ту, которая в файле встретилась раньше.

Выведите максимальное количество пар, встреченных среди всех строк, а также без пробелов и разделителей букву из данной строки, которая встречается чаще всего.

Пример. Исходный файл:

ZCQABA

ZALMAC

CRACUT

В этом примере в первой и второй строках по одной подходящей паре (AB и LM), в третьей таких пар нет. Берём первую строку, т.к. она раньше встречается в файле. В этой строке чаще других встречается буква А. Если бы она была не единственной, то выбрали ту букву, что раньше стоит в алфавите. В ответе для этого примера надо записать 1A.

Вложения к задаче
Показать ответ и решение
f = open(’Задание_49_ДЗ.txt’)  
count = 0  
maxim = 0  
s = ""  
for i in f:  
    count = 0  
    for j in range(len(i) - 1):  
        if ord(i[j]) + 1 == ord(i[j + 1]):  
            count += 1  
    if count > maxim:  
        maxim = count  
        s = i  
alph = sorted(list("qwertyuiopasdfghjklzxcvbnm".upper()))  
a = [0] * 26  
for i in range(len(alph)):  
    a[i] = s.count(alph[i])  
print(maxim, alph[a.index(max(a))])

 

Ответ: 50Y

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

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

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

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

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

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

# Проверка, является ли исходная строка палиндромом
if S == S[::-1]:  # S[::-1] - срез переворачивания строки
    print(0)  # Выводим необходимое количество букв ’a’, то есть 0
else:  # Иначе нужно попробовать дописать в начало строки буквы ’a’
    left_count_a = 0  # Счётчик для букв ’a’ слева
    right_count_a = 0  # Счётчик для букв ’a’ справа

    for i in range(len(S) // 2):
        # Пока слева будут идти буквы ’a’, будем увеличивать счётчик
        if S[i] == ’a’:
            left_count_a += 1
        # В ином случае остановим цикл
        else:
            break
    # Аналогично с буквами ’a’ с правого конца строки
    for i in range(len(S) // 2):
        if S[-i - 1] == ’a’:
            right_count_a += 1
        else:
            break

    # Если слева букв ’a’ меньше, чем справа,
    # то можно добавить недостающеее количество букв ’a’ слева
    if left_count_a <= right_count_a:
        S = ’a’ * (right_count_a - left_count_a) + S
    # В ином случае при дописывании слева букв ’a’
    # строка никогда не станет палиндромом,
    # так как справа букв ’a’ меньше

    # В итоге проверим, стала ли строка палиндромом
    if S == S[::-1]:
        # Выводим необходимое количество букв ’a’
        print(right_count_a - left_count_a)
    else:
        # Выводим -1, что означает,
        # что строку нельзя сделать палиндромом таким образом
        print(-1)

Ответ: 1483099

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

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

В файле 24.txt в первой строке находится строка s, состоящая не более чем из 107  строчных букв английского алфавита. Во второй строке находится строка t, состоящая не более чем из 107  строчных букв английского алфавита. В третьей строке находится строка p, состоящая не более чем из 107  строчных букв английского алфавита. Каждая операция выглядит следующим образом: вы выбираете любой символ из строки p  , удаляете его из p  и вставляете в любую позицию строки s  (вы можете вставить этот символ куда захотите: в начало s  , в конец или между любыми двумя подряд идущими символами). Вам нужно выполнить несколько (возможно, ноль) операций так, чтобы строка s  стала равна строке t  . Вам гарантируется, что это возможно. Запишите в ответе взвешенную сумму букв, которые необходимо удалить из p  и вставить в s  .

За каждую букву ′a′ добавьте к сумме 1  , за каждую ′b′ − 2  , ...  , ′z′ − 26  .

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

Решение на Python:

f = open(’24.txt’)
ans = 0
s, t, p = f.readline(), f.readline(), f.readline()
ABS = sorted(’qwertyuiopasdfghjklzxcvbnm’)
a_t, a_s = [0] * 26, [0] * 26
for i in range(26):
    a_t[i] = t.count(ABS[i])
    a_s[i] = s.count(ABS[i])
for i in range(26):
    ans += (a_t[i] - a_s[i]) * (i + 1)
print(ans)

 

Ответ: 25693851

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

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

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

Вложения к задаче
Показать ответ и решение
f = open("9.txt")
s = f.readline()
temp_s = s[0]
for i in range(1, len(s)):
    if s[i] != temp_s[-1]:
        temp_s += s[i]

print(sum([int(_) for _ in temp_s]))

Ответ: 39505

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

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

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

Вложения к задаче
Показать ответ и решение
file = open(’24.txt’)
s = file.read()
temp_s = ’’
old = ’’
for i in range(len(s)):
    if s[i] != old:
        temp_s += s[i]
    old = s[i]
print(sum([int(_) for _ in temp_s]) // 93)

Ответ: 444

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

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

Текстовый файл 24.txt состоит не более чем из 106  заглавных латинских букв и разбит на строки различной длины. Определите количество строк, в которых буква Q встречается чаще буквы G, а буква P чаще буквы I.

Вложения к задаче
Показать ответ и решение
f = open("24.txt")
a = f.readlines()
coun = 0
for s in a:
    if s.count(’Q’) > s.count(’G’) and s.count(’P’) > s.count(’I’):
        coun += 1
print(coun)

Ответ: 238

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

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

В текстовом файле 1.txt находится цепочка из символов латинского алфавита A, C, D, F,O. Найдите третье вхождение подцепочки ”FOCCD” и запишите в ответе позицию, с которой она начинается. Индексация начинается с 1.

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

# Выполняем всего три замены, чтобы было удобно искать
a = a.replace(’FOCCD’, ’*****’, 3)

# rfind(*искомый элемент*) — поиск вхождения с конца,
# +1 прибаляем, т.к. индексация с нуля идёт, а мы считаем с единицы
print(a.rfind(’*****’)+1)

Ответ: 6680

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

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

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

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

# Алфавит
abc = ’ABCDEFGHIJKLMNOPQRSTUVWXYZ’

ml = 0
# Пробегаемся по каждой строке
for i in s:
    if i.count(’H’) > 35:
     # Пробегаемся по каждой букве
        for l in abc:
            # i.find(l) — первое появление буквы
            # i.rfind(l) — последнее появление буквы
            ml = max(ml, i.rfind(l)-i.find(l))
print(ml)

Ответ: 1017

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

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

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

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

c = 0
for i in s:
    if i.count(’T’) > i.count(’B’):
        c += 1
print(c)

Ответ: 484

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

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

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

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

abc = ’ABCDEFGHIJKLMNOPQRSTUVWXYZ’

c = 0
for i in s:
    # Перебором букв выявляем наличие подходящей комбинации
    for l in abc:
        if ’K’+l+’N’ in i:
            c += 1
            # Чтобы было без повторов, прерываем цикл
            break
print(c)

Ответ: 761

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

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

Текстовый файл 15.txt содержит только символы A, B, C, D, E,F. Определите максимальное количество идущих подряд пар символов вида согласная + гласная.

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

abc1 = ’AEIOUY’
abc2 = ’BCDFGHJKLMNPQRSTVWXZ’

c = 0
mx = 0
# Делаем 2 цикла,
# один начинает с первого символа,
# другой со второго.
# Шаг делаем в две единицы, чтобы проверять по два символа
for i in range(0, len(s), 2):
    # Чтобы индекс не вылез за границу строки
    if i != len(s) - 1:
        if s[i] in abc2 and s[i+1] in abc1:
            c += 1
            mx = max(mx, c)
        else:
           c = 0


for i in range(1, len(s), 2):
    if i != len(s)-1:
        if s[i] in abc2 and s[i+1] in abc1:
            c += 1
            mx = max(mx, c)
        else:
            c = 0

print(mx)

Ответ: 11

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

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

Текстовый файл состоит не более чем из 106  символов и содержит заглавные буквы английского алфавита и цифры. Определите максимальное число, записанное в этом файле между TT и удовлетворяющее маске «12??34???5», где символ ? обозначает любую цифру. Пример такого числа: 1200340005. Найдите сумму цифр найденного числа.

Вложения к задаче
Показать ответ и решение
def sum_of_digits(n):#Функция,возвращающая сумму цифр числа
    s = 0
    while n > 0:
        s += n % 10
        n//= 10
    return s

s = open(’24__1udcl.txt’).readline()
c=0
s = s.split(’T’)
for x in s:
    if len(x) == 10 and x.isdigit():
        if x[0:2] == ’12’ and x[-1] == ’5’ and x[4:6] == ’34’:
            c=max(c,sum_of_digits(int(x)))
print(c)

Ответ: 60

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

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

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

Вложения к задаче
Показать ответ и решение
f = open(’C:/24/3.txt’)
s = f.readline()
c = 0
for i in range(len(s)-4):
    if s[i:i+5] == ’BBDEC’:
        c += 1
    if c == 4:
        print(i+1)
        break

Ответ: 19911

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

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

Текстовый файл состоит не более чем из 103  строк, каждая из которых состоит не более чем из 106  заглавных букв латинского алфавита. Найдите количество нечетных строк (счет с 1) четной длины, в которых количество повторений символа A  кратно трем, при этом в первой половине строки количество сочетаний AR  не меньше количества сочетаний PARK  , а во второй половине количество символов M  не должно превышать количество символов O  .

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

Вложения к задаче
Показать ответ и решение
f = open(’file.txt’)
i = 1
count = 0
for line in f:
    if (i % 2 == 1):
        line = line.strip() # нужно убрать символ переноса строки
        n = len(line)
        if (n % 2 == 0) and (line.count(’A’) % 3 == 0):
            if (line[:n//2].count(’AR’) >= line[:n//2].count(’PARK’)) and\
                    (line[n//2:].count(’M’) <= line[n//2:].count(’O’)):
               count += 1
    i += 1
print(count)

 

Ответ: 20

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

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

Текстовый файл состоит не более чем из 106  заглавных букв латинского алфавита. Гарантируется, что количество символов в строке четное. Вам нужно заменить некоторые латинские буквы на другие таким образом, чтобы из символов строки можно было составить палиндром. Например, для строки AVRORA можно заменить O на V или V на O, тогда из данного набора букв мы сможем составить палиндром.

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

Вложения к задаче
Показать ответ и решение
f = open("24-2__1voqd.txt")
s = f.read()
ar = [0] * 100
for i in range(len(s)):
    ar[ord(s[i])] += 1
ans = 0
for i in range(65, 91):
    if ar[i] % 2 == 1:
        ans += 1
print(ans // 2)

 

Ответ: 7

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

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

Текстовый файл состоит не более чем из 104  строк, каждая из которых состоит не менее чем из 15 и не более чем из      103  заглавных букв A  , B  , C  , D  . Найдите количество строк, в которых либо изначально есть 15-символьный палиндром, либо его можно получить перестановкой пары символов из данной подстроки. Например, для строки BABDDAD  можно поменять символы B  и D  местами.

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

Вложения к задаче
Показать ответ и решение
def check(st):
    if st == st[::-1]:
        return True
    for i in range(15):
        for j in range(i + 1, 15):
            arr = list(st)
            arr[i], arr[j] = arr[j], arr[i]
            if arr == arr[::-1]:
                return True
    return False


f = open("24-3.txt")
ans = 0
for s in f:
    for j in range(len(s) - 14):
        if check(s[j:j + 15]):
            ans += 1
            break
print(ans)

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