ЕГЭ Информатика: Решение задач 8 типа (Python)

Этот материал посвящен решению задач 8 типа ЕГЭ по информатике с использованием Python. Задачи 8 типа относятся к базовому уровню сложности и предполагают выполнение за 4 минуты. Они основаны на кодировании данных и комбинаторике, требуя составления всех возможных комбинаций из заданного набора символов и выбора тех, которые удовлетворяют заданным условиям.

Задача 1: Пятибуквенные кодовые слова

Алексей составляет пятибуквенные кодовые слова из букв a, b, c, x, причем x может быть на последнем месте или отсутствовать. Сколько различных кодовых слов может использовать Алексей?

Решение с вложенными циклами:

letters = 'abcx'
k = 0
for i1 in letters:
    for i2 in letters:
        for i3 in letters:
            for i4 in letters:
                for i5 in letters:
                    word = i1 + i2 + i3 + i4 + i5
                    if (word[-1] == 'x' and word.count('x') == 1) or word.count('x') == 0:
                        k += 1
print(k)

Решение с использованием модуля itertools:

import itertools

letters = 'abcx'
words = itertools.product(letters, repeat=5)
k = 0
for word_tuple in words:
    word = "".join(word_tuple)
    if (word[-1] == 'x' and word.count('x') == 1) or word.count('x') == 0:
        k += 1
print(k)

Задача 2: Четырехбуквенные коды

Василий составляет четырехбуквенные коды из букв о, и, е, й, 7. Код не может начинаться с й и должен содержать хотя бы одну гласную. Сколько различных кодов может составить Василий?

import itertools

letters = 'оие7й'
words = itertools.product(letters, repeat=4)
k = 0
for word_tuple in words:
    word = "".join(word_tuple)
    if word[0] != 'й' and (word.count('о') + word.count('и') + word.count('е') >= 1):
        k += 1
print(k)

Задача 3: Шестибуквенные последовательности из слова «РАЗМАХ»

Из букв слова «РАЗМАХ» составляются шестибуквенные последовательности. Сколько различных последовательностей можно составить, если в каждой из них содержится не менее трех согласных?

import itertools

letters = 'РАЗМАХ'
words = itertools.permutations(letters, 6)
unique_words = set()
for word_tuple in words:
    word = "".join(word_tuple)
    if word.count('Р') + word.count('З') + word.count('М') + word.count('Х') >= 3:
        unique_words.add(word)
print(len(unique_words))

Задача 4: Пятибуквенные коды из слова «АРЕАЛ»

Артур составляет пятибуквенные коды перестановкой букв слова «АРЕАЛ», не ставя рядом две гласные. Сколько различных кодов может составить Артур?

import itertools

letters = 'АРЕАЛ'
words = itertools.permutations(letters)
unique_words = set()
for word_tuple in words:
    word = "".join(word_tuple)
    if not ("АА" in word or "АЕ" in word or "ЕА" in word):
        unique_words.add(word)
print(len(unique_words))

Задача 5: Восьмибуквенные коды из слова «АММИАК АТ»

Вася составляет восьмибуквенные коды из букв слова «АММИАК АТ», при этом каждая буква должна встречаться столько же раз, сколько в исходном слове. В коде должны стоять рядом две гласные или две согласные.

import itertools

letters = 'АММИАК АТ'
words = itertools.permutations(letters)
unique_words = set()

vowels = 'АИА'
consonants = 'ММКАТ'

for word_tuple in words:
    word = "".join(word_tuple)
    valid = False
    for i in range(len(word) - 1):
        if (word[i] in vowels and word[i+1] in vowels) or (word[i] in consonants and word[i+1] in consonants):
            valid = True
            break
    if valid:
        unique_words.add(word)
print(len(unique_words))

Задача 6: Пятибуквенные кодовые слова из букв «ОБЩЕСТВ»

Андрей составляет пятибуквенные кодовые слова из букв «ОБЩЕСТВ». Слово не может начинаться с «щ» или «б», должно заканчиваться на «ов», не может содержать «ев» и «ве», но обязательно содержит «тп».

import itertools

letters = 'ОБЩЕСТВ'
words = itertools.product(letters, repeat=5)
k = 0
for word_tuple in words:
    word = "".join(word_tuple)
    if (word[0] not in 'щб') and word[-2:] == 'ов' and 'ев' not in word and 'ве' not in word and 'тп' in word:
        k += 1
print(k)

Задача 7: Количество слов между «ДОМОК» и «КОМОТ»

Пятибуквенные слова из букв «ДКМО» записаны в алфавитном порядке. Определите количество слов между «ДОМОК» и «КОМОТ» (включая эти слова).

import itertools
letters = 'ДКМО'
words = sorted(list(itertools.permutations(letters)))
domok_index = words.index('ДОМОК')
komot_index = words.index('КОМОТ')
print(komot_index - domok_index + 1)

Задача 8: Номер первого слова, начинающегося на «С» с двумя соседними «О»

Петя составляет пятибуквенные слова из букв «СТЕКЛО» в алфавитном порядке. Найдите номер первого слова, начинающегося на «С» и содержащего две соседние буквы «О».

import itertools

letters = 'СТЕКЛО'
s = 0
for word_tuple in itertools.permutations(letters):
    word = "".join(word_tuple)
    s += 1
    if word[0] == 'С' and 'ОО' in word:
        print(s)
        break

Разбираемые задачи демонстрируют различные подходы к решению задач 8 типа ЕГЭ по информатике. Использование модуля itertools значительно упрощает и ускоряет процесс генерации комбинаций. Важно помнить о специфике задачи и учитывать такие моменты, как повторяющиеся буквы (использование множеств для исключения дубликатов) и особенности алфавитного порядка.

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