Задача к ЕГЭ по информатике на тему «подсчет количества слов/чисел» №16

Арез составляет шестибуквенные слова из букв слова НАКОВАЛЬНЯ. Каждая буква может встречаться в слове только один раз, на первом месте не может стоять буква Ь, а буква Л может стоять только в окружении гласных. Сколько слов может составить Арез?

Решение через циклы

a = ’НАКОВАЛЬНЯ’

count = set()
gl = ’АОЯ’ # гласные буквы слова
m = [x1+’Л’+x2 for x1 in gl for x2 in gl] # комбинации, из которых одна точно должна быть в слове если в слове есть Л
for x1 in ’НАКОВАЛНЯ’:
    for x2 in a:
        for x3 in a:
            for x4 in a:
                for x5 in a:
                    for x6 in a:
                        s = x1+x2+x3+x4+x5+x6
                        # проверка, что все буквы встречаются единожды в слове
                        if all(s.count(i) == 1 for i in s):
                            if ’Л’ in s:
                                # проверка, что хотя бы одна комбинация есть в слове
                                if any(i in s for i in m):
                                    count.add(s)
                            else:
                                count.add(s)
print(len(count))

Решение через itertools

from itertools import permutations

s = set(’НАКОВАЛЬНЯ’)
gl = ’АОЯ’

cnt = 0
for i in permutations(s, 6):
    i = ’’.join(i)
    if i[0] == ’Ь’ or i[0] == ’Л’ or i[-1] == ’Л’:
        continue
    flag = True
    for j in range(1, len(i) - 1):
        if i[j] == ’Л’:
            if not ((i[j - 1] in gl) and (i[j + 1] in gl)):
                flag = False
                break
    if flag:
        cnt += 1
print(cnt)

Ответ: 5544
Оцените статью
Я решу все!