Мирослав составляет коды из букв, входящих в его имя. Код должен состоять из 5 букв, буквы в коде не должны повторяться, согласных в коде должно быть больше, чем гласных, две гласные буквы нельзя ставить рядом. Код не должен начинаться с гласной буквы.
Сколько кодов может составить Мирослав?
Решение через циклы
a = ’МИРОСЛАВ’
g = ’ИОА’
s = ’МРСЛВ’
sochg = []
for i in g: #запускаем два цикла для будущего определения отсутствия Г+Г
for j in g:
sochg.append(i+j) #в массив добавляем все возможные сочетания букв из списка гласных
count = 0
for i in s:
for j in a:
for k in a:
for l in a:
for m in a:
w = i+j+k+l+m
t = set(s)
counts = len([i for i in w if i in s])
#кол-во согласных
countg = len([i for i in w if i in g])
#кол-во гласных
f = len([i for i in sochg if i in w])
#кол-во сочетаний из списка sochg - Г+Г
if len(set(w)) == 5 and counts > countg and f == 0:
count += 1
print(count)
Решение через itertools
from itertools import permutations
count = set()
gl = ’ИОА’ # гласные буквы слова
sogl = ’МРСЛВ’ # согласные буквы слова
for x in permutations(’МИРОСЛАВ’,r = 5):
s = ’’.join(x)
count_sogl = len([i for i in s if i in sogl]) # количество согласных букв в слове
count_gl = len([i for i in s if i in gl]) # количество гласных букв в слове
# проверка, что слово начинается не с гласной буквы, также, что количество согласных больше чем количество гласных букв и то, что нет рядом стоящих гласных букв
if s[0] not in gl and count_sogl > count_gl and all(x1+x2 not in s for x1 in gl for x2 in gl):
count.add(s)
print(len(count))