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

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

Задача 1#88143

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

Вложения к задаче
Показать ответ и решение
Способ решения 1:
s = open(’24_M1.txt’).readline()
d = {x: 0 for x in sorted(set(s))}#словарь, в котором в качестве ключа у нас буква,
# а в качестве значения - количество раз, сколько она встречается по определенному условию
for i in range(len(s)-2):
    if s[i] == s[i+2]:#если два рядом стоящих символа равны между собой
        d[s[i+1]] += 1#то к значению той буквы, что стоит между этой пары добавляем единицу
#выводим букву и количество раз, сколько она встречается в файле
print([(x,s.count(x)) for x in d.keys() if d[x] == min(d.values())])

Способ решения 2:
s = open(’24_M1.txt’).readline()
count = [0]*len(set(s))# создаем массив длиной количества различных букв в файле,
#каждый элемент - это количество раз встреченных определенных букв по заданному условию.
#к примеру,count[0] - количество раз, сколько встретилась буква А,
#count[1] - количество раз, сколько встретилась буква B и так далее.
for i in range(len(s)-2):
    if s[i] == s[i+2]:
        count[ord(s[i+1]) % 65] += 1 #Функция ord возращает числовое значение буквы,
        #остаток от 65 берется поскольку у буквы A в таблице символов значение 65,
        #у буквы B - 66 и так далее.
        #нужно сделать так, чтобы числовое значение буквы А стало равным 0,
        #для B - 1 и так далее, для этого и берем остаток.
letter = chr(count.index(min(count)) + 65)
#Функция chr обратна ord, числовое значение превращает в символ
#определяем букву, которая встречалась минимальное количество раз по заданному условию.
print(letter,s.count(letter))

Ответ: M383921

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

Задача 2#88142

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

Вложения к задаче
Показать ответ и решение
Способ решения 1:
s = open(’24_M1.txt’).readline()
d = {x: 0 for x in sorted(set(s))}#словарь, в котором в качестве ключа у нас буква,
# а в качестве значения - количество раз сколько она встречается по определенному условию
for i in range(len(s)-2):
    if s[i] == s[i+1]:#если два рядом стоящих символа равны между собой
        d[s[i+2]] += 1#то к значению той буквы, что стоит за этой парой, добавляем единицу
#выводим букву и количество раз, сколько она встречается в файле
print([(x,s.count(x)) for x in d.keys() if d[x] == max(d.values())])

Способ решения 2:
s = open(’24_M1.txt’).readline()
count = [0]*len(set(s))# создаем массив длиной количества различных букв в файле,
#каждый элемент - это количество раз встреченных определенных букв по заданному условию.
#к примеру,count[0] - количество раз, сколько встретилась буква А,
#count[1] - количество раз, сколько встретилась буква B и так далее.
for i in range(len(s)-2):
    if s[i] == s[i+1]:
        count[ord(s[i+2]) % 65] += 1 #Функция ord возвращает числовое значение буквы,
        # остаток от 65 берется, поскольку у буквы A в таблице символов значение 65,
        # у буквы B - 66 и так далее.
        # нужно сделать так, чтобы числовое значение буквы А стало равным 0,
        # для B - 1 и так далее, для этого и берем остаток.
letter = chr(count.index(max(count)) + 65)
# Функция chr обратна ord, числовое значение превращает в символ
#определяем букву, которая встречалась максимальное количество раз по заданному условию.
print(letter,s.count(letter))

Ответ: S385700

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

Задача 3#82921

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

Вложения к задаче
Показать ответ и решение
s = open(’24_13100.txt’).readline()
d = {x: s.count(x) for x in sorted(set(s))}
mx = 0
letters = ’’
for i in d.items():
    if i[1] > mx:
        mx = i[1]
        letters += i[0]
# Определили две самые часто встречающиеся буквы
letters = letters[-2:]
print(s.count(letters[::-1]))

Ответ: 1664

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

Задача 4#82920

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

Вложения к задаче
Показать ответ и решение
s = open(’24_13100.txt’).readline()
#словарь, в котором записана буква и сколько раз она встречается в файле
d = {x: s.count(x) for x in sorted(set(s))}
mn = 10**20
symb = ’’
#определили букву, которая встречается меньше всего раз и сколько раз она встречается
for i in d.items():
    if i[1] < mn:
        mn = i[1]
        symb = i[0]
m = {x: 0 for x in sorted(set(s))}
for i in range(len(s)):
    if s[i] == symb:
        m[s[i+1]] += 1
        m[s[i-1]] += 1
# определили букву, которая встречается чаще всего рядом с Y
x = [i for i in m.items() if i[1] == max(m.values())]
print(x[0][0] + str(s.count(x[0][0])))

Ответ: D42392

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

Задача 5#82919

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

Вложения к задаче
Показать ответ и решение
f = open(’24_13100.txt’).readline()
while ’TXTXT’ in f:
    f = f.replace(’TXTXT’, ’TXTTXT’)
print(f.count(’TXT’))

Ответ: 68

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

Задача 6#61456

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

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

c = 0
for s in a:
    if s.count(’KRL’) > 1:
        c += 1
print(c)

Ответ: 1

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

Задача 7#61455

Текстовый файл 13.txt состоит не более чем из 106  заглавных латинских букв (A..Z). Файл разбит на строки различной длины.Необходимо найти строку, содержащую наибольшее количество букв O (если таких строк несколько, надо взять ту, которая в файле встретилась раньше). Определите, какая гласная буква, стоящая после согласной, встречается в этой строке чаще всего. Если таких букв несколько, надо взять ту, которая стоит раньше в алфавите. Запишите в ответе эту букву, а затем – сколько раз она встречается во всем файле.

Примемание: в латинском алфавите 6 гласных A, E, I, O, U, Y, остальные буквы согласные.

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

# Ведём поиск строки,
# в которой буква O встречается чаще
mx = 0
ms = ’’
for s in a:
    if s.count(’O’) > mx:
        mx = s.count(’O’)
        ms = s

# Ищем букву,
# которая встречается после согласной чаще всего
mx = 0
b = ’’
abc1 = ’AEIOUY’
abc2 = ’BCDFGHJKLMNPQRSTVWXZ’
for j in abc1:
    c = 0
    for k in abc2:
        c += ms.count(k+j)
    if c > mx:
        mx = c
        b = j

# Ищем, сколько раз в файле встречается эта буква
c = 0
for s in a:
    c += s.count(b)

print(b, c)

Ответ: O38316

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

Задача 8#61454

Текстовый файл 12.txt состоит не более чем из 106  заглавных латинских букв (A..Z). Файл разбит на строки различной длины. Необходимо найти строку, содержащую самую длинную цепочку стоящих подряд одинаковых букв. Если таких строк несколько, надо взять ту, которая в файле встретилась раньше. Определите, какая буква встречается в этой строке реже всего, но присутствует. Если таких букв несколько, надо взять ту, которая стоит первой в алфавите. Запишите в ответе эту букву, а затем – сколько раз она во всем файле стоит перед буквой F.

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

# l — текущая длина, ml — максимальная
# ms — строка с самой длинной цепочкой из одинаковых букв
l = 1
ml = 1
ms = ’’
for s in a:
    # Чтобы не было ошибочных подсчётов длины,
    # перед началом проверки новой строки сбрасываем счётчик
    l = 1
    for i in range(len(s)-1):
        if s[i] == s[i+1]:
            l += 1
            # Если цепочка на текущий момент макс. длины,
            # то сохраняем текущую строку
            if l > ml:
                ms = s
            ml = max(l, ml)
        else:
            l = 1

# Ищем букву,
# которая встречается реже в сохранённой строке
# (при этом она там должна быть)
mn = 10**10
b = ’’
abc = ’ABCDEFGHIJKLMNOPQRSTUVWXYZ’
for j in abc:
    if ms.count(j) < mn and ms.count(j) > 0:
        mn = ms.count(j)
        b = j

# Считаем, сколько раз в файле найденная буква стоит перед F
c = 0
for s in a:
    c += s.count(b+’F’)

print(b, c)

Ответ: E1485

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

Задача 9#60738

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

Например, в тексте ZYYZWWZSZW после буквы Z два раза стоит W, один раз буквы – Y и S. Для этого текста ответом будет W.

Вложения к задаче
Показать ответ и решение
f = open(’2prob/24__1sajl.txt’)
s = f.readline()
s = s.split(’Z’)[1:] #Разделяем строку по Z. Избавляемся от самой первой подстроки, потому что перед ней вовсе не было буквы Z.
# Для красоты записи используем срез, однако это можно было реализовать и в самом цикле, задав его промежутки как (1, len(s)).

alp = ’ABCDEFGHIJKLMNOPQRSTUVWXYZ’ # Задали весь алфавит
counter = [0]*26 # Создали массив, где в ячейке хранится количество встреч соответствующей буквы сразу за Z.
# То есть, в ячейке counter[1] хранится количество, сколько раз после буквы Z встретилась буква B = alp[1].

for substring in s: # Пробегаемся по всем подстрокам
    if substring: # Если подстрока substring не пустая. Иначе, если она пустая, то возникнет ошибка.
        elem = substring[0] # Берём самый первый элемент подстроки; он стоит сразу после буквы Z. Остальные элементы нас не интересуют.
        for i in range(len(alp)): # Пробегаемся по алфавиту
            if elem == alp[i]: # Если наш elem равен букве алфавита с индексом i
                counter[i] += 1 # Увеличиваем соответствующую ячейку в массиве на единицу

# Дальше можем сравнить значения глазами при помощи следующих выводов
print(alp)
print(counter)
print(max(counter))

# Либо можем изощриться:
print(alp[counter.index(max(counter))])

Ответ: B

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

Задача 10#58105

Текстовый файл состоит не более чем из 106  символов V,D, M.

Найдите количество символов D  , т.е. в последовательности VDMDMDDMMDVD будет ответ 6.

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

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

Ответ: 87238

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

Задача 11#57117

В файле 24.3.txt представлена последовательность, состоящая из символов X, Y, Z. Необходимо указать количество всех палиндромов, состоящих из 5 символов, имеющихся в последовательности. Каждая буква может входить в состав нескольких палиндромов.

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

Примечание: Палиндром – слово, которое справа налево и слева направо читается одинаково.

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

Ответ: 111635

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

Задача 12#55615

В текстовом файле 6.txt. находится цепочка из символов латинского алфавита A, B, C, D, E. Определите количество подстрок длиной не менее 10 символов, которые начинаются буквой A, заканчиваются буквой D и не содержат других букв A и D, кроме первой и последней.

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

Решение №1

f = open(’24.txt’)
s = f.readline()
ans = 0
for i in range(len(s)):
    if s[i] == ’A’: #Возможно, здесь начинается нужная подстрока
        for j in range(i + 1, len(s)): #Запускаем цикл со следующего элемента
            if s[j] == ’A’: #Если попали на вторую букву А, то подстрока нам не подходит
                break
            if s[j] == ’D’: #Если попали на букву D
                if (j - i + 1) >= 10: #Если длина подстроки больше 10
                    ans += 1 #Нашли подходящую подстроку, увеличиваем счётчик
                break #Либо нашли подходящую подстроку, либо длина меньше 10 и мы её пропускаем
print(ans)

Решение №2

f = open(’24.txt’)
s = f.readline()
k = 0
for i in range(len(s) - 9): #Изменили длину цикла
    if s[i] == ’A’:
        for n in range(9, len(s)): #Подходящая последовательность может быть при n = 9. Длина подстроки, заключённой
                                #между эл-тами s[0] и s[9] равна 9 - 0 + 1 = 10 >= 10.
            if s[i + n] == ’D’:
                b = s[i:i + n + 1]
                if b.count(’A’) == 1 and b.count(’D’) == 1:
                    k += 1
                    print(b)
                else: #Если условие выше не выполнилось, то в текущей подстроке уже несколько букв A или D, которые,
                    #очевидно, останутся в подстроке, даже если мы сдвинем её правую границу (n)
                    break #Прерываем цикл с такой подстрокой
print(k)

Ответ: 76

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

Задача 13#54937

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

Примечание: первая позиция начинается с единицы.

Вложения к задаче
Показать ответ и решение
file = open(’24.txt’)
s = file.read()
count_occurrence = 0
index_occurrence = ’’
for i in range(len(s) - 5):
    if s[i:i + 5] == "BEBAD":
        count_occurrence += 1
        if count_occurrence == 4:
            index_occurrence = i
print(index_occurrence + 1)

Ответ: 15360

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

Задача 14#52988

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

Примечание: начальная позиция начинается с единицы.

Вложения к задаче
Показать ответ и решение
file = open(’24.txt’)
s = file.read()
occurrence_counter = 0
occurrence_index = ’’
for index in range(len(s) - 5):
    if s[index: index + 5] == "CCADE":
        occurrence_counter += 1
        if occurrence_counter == 5:
            occurrence_index = index
            break
print(occurrence_index + 1)

Ответ: 10851

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

Задача 15#48784

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

Примечание: позиция первого элемента имеет номер 1.

Вложения к задаче
Показать ответ и решение
f = open(’1.txt’)
s = f.read()
index_substring = ’’
counter_substring = 0
for i in range(len(s)):
    if s[i:i + 5] == "AAEBD":
        counter_substring += 1
    if counter_substring == 3:
        index_substring = i + 1
        break
print(index_substring)

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