ЕГЭ Информатика 2021: Задача 8 на Python

Задание 8 ЕГЭ по информатике 2021 года относится к темам комбинаторики и кодирования данных. Вместо ручного решения, рассмотрим применение языка программирования Python, доступного на экзамене.

Задача 1: Кодовые слова Игоря

Игорь составляет 4-буквенные кодовые слова из букв ‘a’, ‘b’, ‘c’, ‘d’, ‘x’, при этом буква ‘x’ встречается ровно один раз. Другие буквы могут встречаться любое количество раз или отсутствовать. Определите количество возможных кодовых слов.

Решение использует вложенные циклы для перебора букв и проверку условия на наличие ровно одной буквы ‘x’.

letters = "abcdx"
k = 0
for a in letters:
    for b in letters:
        for c in letters:
            for d in letters:
                word = a + b + c + d
                if word.count('x') == 1:
                    k += 1
print(k) # Результат: 256

Задача 2: Шестибуквенные слова Васи

Вася составляет 6-буквенные слова из букв ‘к’, ‘а’, ‘н’, ‘и’, ‘т’, при этом буква ‘к’ используется ровно два раза. Остальные буквы могут встречаться любое количество раз или отсутствовать. Найдите количество таких слов.

Решение аналогично предыдущей задаче, но с шестью вложенными циклами для 6-буквенных слов и проверкой на два вхождения буквы ‘к’.

letters = "канит"
k = 0
for a in letters:
    for b in letters:
        for c in letters:
            for d in letters:
                for e in letters:
                    for f in letters:
                        word = a + b + c + d + e + f
                        if word.count('к') == 2:
                            k += 1
print(k) # Результат: 1215

Задача 3: Коды Василия

Василий составляет 4-буквенные слова из букв ‘м’, ‘о’, ‘и’, ‘с’, ‘е’, ‘й’. Код не может начинаться с ‘й’ и должен содержать хотя бы одну гласную (‘о’, ‘и’, ‘е’). Определите количество таких кодов.

letters = "моисей"
k = 0
for a in letters:
    for b in letters:
        for c in letters:
            for d in letters:
                word = a + b + c + d
                if word[0] != 'й' and (word.count('о') > 0 or word.count('и') > 0 or word.count('е') > 0):
                    k += 1
print(k)

Задача 4: Коды Миши

Миша составляет 5-буквенные коды из букв ‘п’, ‘о’, ‘р’, ‘н’, ‘е’, ‘т’. Гласные буквы (‘о’, ‘е’) могут входить в код не более одного раза. Определите количество таких кодов.

letters = "порнет"
k = 0
for a in letters:
    for b in letters:
        for c in letters:
            for d in letters:
                for e in letters:
                    word = a + b + c + d + e
                    if word.count('о') <= 1 and word.count('е') <= 1:
                        k += 1
print(k) # Результат: 41864

Задача 5: Коды Васи (уникальные буквы)

Вася составляет 5-буквенные коды из букв ‘к’, ‘а’, ‘л’, ‘ы’, ‘й’. Каждая буква используется ровно один раз. Код не может начинаться с ‘й’ и не может содержать сочетание «ак». Найдите количество таких кодов.

letters = "калый"
k = 0
for a in letters:
    for b in letters:
        for c in letters:
            for d in letters:
                for e in letters:
                    word = a + b + c + d + e
                    if len(set(word)) == 5 and word[0] != 'й' and "ак" not in word:
                        k += 1
print(k) # Результат: 92

Задача 6: Перестановки букв слова «ТАРТАР»

Петя составляет 6-буквенные слова перестановкой букв слова «ТАРТАР». Найдите количество различных слов. Для избежания дубликатов используется множество.

letters = "тартар"
s = set()
for a in letters:
    for b in letters:
        for c in letters:
            for d in letters:
                for e in letters:
                    for f in letters:
                        word = "".join(sorted(a + b + c + d + e + f))
                        if word.count('т') == 2 and word.count('а') == 2 and word.count('р') == 2:
                            s.add(word)
print(len(s)) # Результат: 90

Задача 7: Позиция слова «школа»

Пятибуквенные слова из букв ‘а’, ‘к’, ‘л’, ‘о’, ‘ш’, записанные в алфавитном порядке, пронумерованы. Определите позицию слова «школа» в этом списке.

letters = "аклош"
words = []
for a in letters:
    for b in letters:
        for c in letters:
            for d in letters:
                for e in letters:
                    word = "".join(sorted(a + b + c + d + e))
                    words.append(word)

print(words.index("школа") + 1) # Результат: 111

Задача 8: Слова между «топор» и «робот»

Пятибуквенные слова из букв ‘о’, ‘п’, ‘р’, ‘ы’, ‘т’, записанные в алфавитном порядке, пронумерованы. Определите количество слов между словами «топор» и «робот», включая эти слова.

letters = "опрт"
words = []
for a in letters:
    for b in letters:
        for c in letters:
            for d in letters:
                for e in letters:
                    word = "".join(sorted(a + b + c + d + e))
                    words.append(word)

index_topor = words.index("топор")
index_robot = words.index("робот")

print(index_robot - index_topor + 1) # Результат: 256

Задача 9: Числа, делящиеся на 5

Найдите количество пятизначных чисел, делящихся на 5, с различными цифрами, где четные и нечетные цифры чередуются.

odd = "13579"
even = "02468"
count = 0
for i in range(10000, 100000):
    s = str(i)
    if i % 5 == 0 and len(set(s)) == 5 and (
        (s[0] in odd and s[1] in even and s[2] in odd and s[3] in even and s[4] in odd) or
        (s[0] in even and s[0] != '0' and s[1] in odd and s[2] in even and s[3] in odd and s[4] in even)
    ):
        count += 1
print(count) # Результат: 480

Рассмотренные примеры демонстрируют применение Python для решения комбинаторных задач в рамках задания 8 ЕГЭ по информатике. Использование множеств повышает эффективность кода.

Что будем искать? Например,программа