
№ 8417 (Уровень: Базовый)
Ярослав составляет коды из букв, входящих в слово ЯРОСЛАВ. Код должен состоять из 5 букв,
буквы в коде не должны повторяться, согласных в коде должно быть больше, чем гласных, две гласные буквы нельзя ставить рядом.
Сколько кодов может составить Ярослав?

Комментарии к коду решения:
import itertools- импортирует модульitertools, который предоставляет функции для создания и использования итераторов.count = 0- инициализирует переменнуюcountзначением 0. Эта переменная будет использоваться для подсчета подходящих слов в цикле.for s in itertools.permutations('ЯРОСЛАВ', 5):- запускает циклfor, который проходит через все перестановки длиной 5 букв из заданной строки 'ЯРОСЛАВ'. Каждая перестановка сохраняется в переменной s.slovo = ''.join(s)- объединяет буквы из перестановкиsв строку и сохраняет результат в переменнойslovo.glas = [i for i in slovo if i in 'ЯОА']- создает списокglas, в который добавляются только те буквы из строкиslovo, которые присутствуют в строке 'ЯОА'.sogl = [i for i in slovo if i in 'РСЛВ']- создает списокsogl, в который добавляются только те буквы из строкиslovo, которые присутствуют в строке 'РСЛВ'.if len(sogl) > len(glas):- проверяет, если количество согласных букв больше, чем количество гласных.if all(x not in slovo for x in 'ЯА АЯ АО ОА ЯО ОЯ'.split()):- проверяет, что в словеslovoотсутствуют определенные комбинации букв. Если это условие выполнено для текущего слова, то счетчикcountувеличивается на 1.print(count)- выводит на экран значение переменнойcount, которое представляет количество подходящих слов, удовлетворяющих всем условиям.Таким образом, данный код выполняет перебор всех возможных перестановок из букв слова 'ЯРОСЛАВ' длиной 5, и подсчитывает количество слов, удовлетворяющих определенным условиям, после чего выводит этот результат.
import itertools
count = 0
for s in itertools.permutations('ЯРОСЛАВ', 5):
slovo = ''.join(s)
glas = [i for i in slovo if i in 'ЯОА']
sogl = [i for i in slovo if i in 'РСЛВ']
if len(sogl) > len(glas):
if all(x not in slovo for x in 'ЯА АЯ АО ОА ЯО ОЯ'.split()):
count += 1
print(count)

Еще один вариант решения для самостоятельного изучения:
s = 'ЯРОСЛАВ'
count = 0
for a in s:
for b in s:
for c in s:
for d in s:
for e in s:
slovo = a + b + c + d + e
if len(set(slovo)) == 5:
glas = [i for i in slovo if i in 'ЯОА']
sogl = [i for i in slovo if i in 'РСЛВ']
if len(sogl) > len(glas):
if all(x not in slovo for x in 'ЯА АЯ АО ОА ЯО ОЯ'.split()):
count += 1
print(count)