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

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

Задача 1#56325

Задание выполняется с использованием прилагаемых файлов

Текстовый файл состоит не более чем из 105  строк, каждая из которых содержит только буквы X  , Y  , Z  . Найдите количество строк, где количество букв X  равно количеству букв Y  .

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

Вложения к задаче
Показать ответ и решение
f = open(’24.txt’)
a = [i for i in f]
k = 0
for i in range(len(a)):
    if a[i].count(’X’) == a[i].count(’Y’):
        k += 1
print(k)

 

Ответ: 289

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

Задача 2#33620

Задание выполняется с использованием прилагаемых файлов

Текстовый файл состоит из символов S, R, O. Определите максимальную длину подстроки, состоящей из троек символов OSR или RSO. Искомая подстрока может включать только тройки OSR, только тройки RSO или содержать одновременно как тройки OSR, так и тройки RSO. Тройки не могут пересекаться.

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

Решение 1

s = open(’24.txt’).readline()
s += ’--’ #мусор, чтобы циклы смогли сработать до конца строк
maxim = 0
k = 0
for i in range(1, len(s), 3):
    if (s[i - 1] == ’R’ and s[i] == ’S’ and s[i + 1] == ’O’) or \
            (s[i - 1] == ’O’ and s[i] == ’S’ and s[i + 1] == ’R’):
        k += 1
        maxim = max(k, maxim)
    else:
        k = 0
k = 0
for i in range(2, len(s), 3):
    if (s[i - 1] == ’R’ and s[i] == ’S’ and s[i + 1] == ’O’) or \
            (s[i - 1] == ’O’ and s[i] == ’S’ and s[i + 1] == ’R’):
        k += 1
        maxim = max(k, maxim)
    else:
        k = 0
k = 0
for i in range(3, len(s), 3):
    if (s[i - 1] == ’R’ and s[i] == ’S’ and s[i + 1] == ’O’) or \
            (s[i - 1] == ’O’ and s[i] == ’S’ and s[i + 1] == ’R’):
        k += 1
        maxim = max(k, maxim)
    else:
        k = 0
print(maxim * 3)

Решение 2

f = open("Задание_24__tlln.txt").read()
f = f.replace("OSR", "*").replace("RSO", "*")
counter = 1
maxim = 0
for i in range(len(f) - 1):
    if f[i] == "*" and f[i + 1] == "*":
        counter += 1
        maxim = max(counter, maxim)
    else:
        counter = 1
print(maxim * 3)

Ответ: 15

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

Задача 3#29921

Текстовый файл "Задание_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

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

Задача 4#29920

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

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

Задача 5#29916

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

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

Задача 6#29915

Текстовый файл состоит не более чем из 106  заглавных букв латинского алфавита. Возрастающей последовательностью называется последовательность, элементы которой идут строго в порядке увеличения id по таблице ASCII. Найдите максимальную возрастающую последовательность символов.

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

Вложения к задаче
Показать ответ и решение
f = open(’Задание_43_ДЗ.txt’)
s = f.read()
count = 1
maxim = 0
for i in range(len(s) - 1):
    if s[i] < s[i + 1]:
        count += 1
        maxim = max(maxim, count)
    else:
        count = 1
print(maxim)

Ответ: 9

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

Задача 7#29914

Текстовый файл состоит не более чем из 106  заглавных букв латинского алфавита. Локальным максимумом называется символ, id которого в таблице ASCII больше номеров предыдущего и последующего символа в строке. Будем считать, что первый и последний элемент строки не могут быть локальными максимумами. Найдите максимальное расстояние между двумя соседними локальными максимумами, расстояние в данной задаче это разность индексов.

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

Вложения к задаче
Показать ответ и решение
f = open(’Задание_42_ДЗ.txt’)  
s = f.read()  
ar = []  
for i in range(1, len(s) - 1):  
    if s[i] > s[i + 1] and s[i] > s[i - 1]:  
        ar.append(i)  
maxim = 0  
for i in range(len(ar) - 1):  
    maxim = max(maxim, ar[i + 1] - ar[i])  
print(maxim)

 

Ответ: 20

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

Задача 8#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

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

Задача 9#29912

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

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

Вложения к задаче
Показать ответ и решение
f = open(’Задание_40_ДЗ.txt’)  
s = f.read()  
count = 1  
maxim = 0  
for i in range(len(s) - 1):  
    if ord(s[i]) == ord(s[i + 1]) - 1:  
        count += 1  
        maxim = max(maxim, count)  
    else:  
        count = 1  
print(maxim)

 

Ответ: 5

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

Задача 10#29911

Текстовый файл состоит не более чем из 106  заглавных букв латинского алфавита. Найдите длину максимальной неубывающей подпоследовательности символов по таблице ASCII.

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

Вложения к задаче
Показать ответ и решение
f = open(’Задание_39_ДЗ.txt’).read()  
maxim = 0  
count = 1  
for i in range(len(f) - 1):  
    if (f[i] <= f[i + 1]):  
        count += 1  
        maxim = max(count, maxim)  
    else:  
        count = 1  
print(maxim)  

 

Ответ: 10

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

Задача 11#29910

Текстовый файл состоит не более чем из 106  цифр от 0 до 9. Найдите самую длинную последовательность, цифр одной четности.

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

Вложения к задаче
Показать ответ и решение
f = open("Задание_38_ДЗ.txt")
s = f.read()
maxim, counter = 0, 1
for i in range(len(s) - 1):
    if int(s[i]) % 2 == int(s[i + 1]) % 2:
        counter += 1
        maxim = max(maxim, counter)
    else:
        counter = 1
print(maxim)

Ответ: 27

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

Задача 12#29909

Текстовый файл состоит не более чем из 106  символов, которые являются цифрами от 1 до 9. Вам необходимо найти количество и сумму двузначных палиндромов в данном файле. Пример для строки "11122"количество равно 3, сумма равна 44.

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

Вложения к задаче
Показать ответ и решение
f = open("Задание_37_ДЗ.txt").read()  
count = 0  
sum_pal = 0  
for i in range(len(f) - 1):  
    if (f[i] == f[i + 1]):  
        count += 1  
        sum_pal += int(f[i] + f[i + 1])  
print(count, sum_pal)

 

Ответ: 110942 6098147

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

Задача 13#29908

Текстовый файл состоит не более чем из 106  символов, которые являются цифрами от 1 до 9. Вам необходимо найти знакопеременную сумму цифр данного выражения. Считать, что первый знак — "+". Пример для строки "1234" значение суммы равно 1 + 2− 3+ 4 = 4

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

Вложения к задаче
Показать ответ и решение
f = open("Задание_36_ДЗ.txt").read()  
s = int(f[0])  
for i in range(1, len(f)): # отказ от if  
    s += int(f[i]) * (i % 2 != 0) - int(f[i]) * (i % 2 == 0)  
print(s)

 

Ответ: 1098

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

Задача 14#29907

Текстовый файл состоит не более чем из 106  символов, которые являются цифрами от 1 до 9, знаками плюс, минус. Найдите подпоследовательность, состоящую из максимального количества положительных чисел. (Положительное число - число, перед которым либо нет знака, либо знак "+")

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

Вложения к задаче
Показать ответ и решение
f = open(’Задание_35_ДЗ.txt’).read()  
max_plus = 1  
count_plus = 1  
max_sum = int(f[0])  
sum = int(f[0])  
for i in range(1, len(f) - 1, 2):  
    if (f[i] == ’+’):  
        sum += int(f[i + 1])  
        count_plus += 1  
        if (count_plus > max_plus):  
            max_plus = count_plus  
            max_sum = sum  
        elif (count_plus == max_plus):  
            if (sum > max_sum):  
                max_sum = sum  
    else:  
        sum = 0  
        count_plus = 0  
print(max_sum)

 

Ответ: 62

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

Задача 15#29906

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

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

Вложения к задаче
Показать ответ и решение
f = open(’Задание_34_ДЗ.txt’).read()
s = int(f[0]) # первый символ
s1 = 0
key = True
for i in range(1, len(f) - 1, 2): # ходим только по знакам
    if key: # до знака равно
        if (f[i] == ’+’):
            s += int(f[i + 1])
        elif (f[i] == ’=’):
            key = False
            s1 += int(f[i + 1]) # первый символ после знака равно
        else:
            s -= int(f[i + 1])
    else:
        if (f[i] == ’+’):
            s1 += int(f[i + 1])
        else:
            s1 -= int(f[i + 1])
print(max(s, s1) * (s != s1))

 

Ответ: 637

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

Задача 16#29905

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

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

Вложения к задаче
Показать ответ и решение
f = open(’Задание_33_ДЗ.txt’).read()  
s = int(f[0]) # первый символ  
for i in range(1, len(f) - 1, 2): # ходим только по знакам  
    if (f[i] == ’+’):  
        s += int(f[i + 1])  
    else:  
        s -= int(f[i + 1])  
print(s)

 

Ответ: 549

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

Задача 17#29904

Текстовый файл состоит не более чем из 103  строк, каждая из которых содержит не более чем 102  букв латинского алфавита. Найдите строку, которая содержит максимальное количество символов A  , если таких строк несколько, то используйте первую найденную. В найденной строке найдите самый редко используемый символ (больше 0 раз).

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

Вложения к задаче
Показать ответ и решение
f = open(’Задание_32_ДЗ.txt’)
alph = sorted(list(’QWERTYUIOPASDFGHJKLZXCVBNM’))
alph_count = [0] * 26
find_string = ""
maxim_count_A = 0
minim = 100000000
minim_symb = ""
for i in f:
    if i.count(’A’) > maxim_count_A:
        maxim_count_A = i.count(’A’)
        find_string = i
for i in range(26):
    alph_count[i] = find_string.count(alph[i])
    if alph_count[i] < minim and alph_count[i] > 0:
        minim =  alph_count[i]
        minim_symb = alph[i]
print(minim_symb, minim)

Ответ: H 1

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

Задача 18#29903

Текстовый файл состоит не более чем из 106  заглавных букв латинского алфавита. Найдите самый часто повторяющийся символ между символами A  и R  (в данном порядке: A  *символ* R  ). Если таких символов несколько, следует взять тот, что раньше по алфавиту.

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

Вложения к задаче
Показать ответ и решение
f = open(’Задание_31_ДЗ.txt’)  
s = f.readline()  
alph = list(’QWERTYUIOPASDFGHJKLZXCVBNM’)  
alph.sort()  
ar = [0] * 27  
for i in range(1, len(s) - 1):  
    if s[i - 1] == ’A’ and s[i + 1] == ’R’:  
        ind = alph.index(s[i])  
        ar[ind] += 1  
print(alph[ar.index(max(ar))])

 

Ответ: O

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

Задача 19#29902

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

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

Пример подходящей последовательности: BAKON   Y RARET

Вложения к задаче
Показать ответ и решение
f = open(’Задание_30_ДЗ.txt’).read()  
gl = ’EIOAUY’  
count = 1  
maxim = 0  
for i in range(len(f) - 1):  
    if ((f[i] in gl) != (f[i + 1] in gl)):  
        count += 1  
        maxim = max(maxim, count)  
    else:  
        count = 1  
print(maxim)

 

Ответ: 16

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

Задача 20#29899

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

Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_27_ДЗ". В ответе запишите символ, который повторяется больше всего. Английский алфавит: ABCDEF   GHIJKLM   N OP QRST  UV W XY Z  .

Вложения к задаче
Показать ответ и решение
f = open(’Задание_27_ДЗ.txt’).read()  
al = sorted(list(’QWERTYUIOPASDFGHJKLZXCVBNM’)) # по порядочку  
al_count = [0] * 26  
for i in range(len(f)):  
    al_count[al.index(f[i])] += 1  
maxim = max(al_count) # максимальное количество повторений какой-то буквы  
ind = al_count.index(maxim) # индекс первого вхождения  
print(al[ind]) # или так print(al[al_count.index(max(al_count))])

 

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