№ 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)