Кирилл составляет 7-буквенные слова из букв У, С, Л, О, В, И, Е. Каждая буква может встречаться ровно один раз. При этом в слове не могут стоять рядом две согласные буквы, буква И не может стоять на первом месте, а буква О не может стоять на последнем. Словом считается любая допустимая последовательность букв, не обязательно осмысленная.
Сколько слов может составить Кирилл?
Решение через циклы
s = ’УСЛОВИЕ’
sogl = ’СЛВ’
n = 0
sochg = []
for i in sogl: #запускаем два цикла для будущего определения отсутствия СОГЛ+СОГЛ
for j in sogl:
sochg.append(i+j) #в массив добавляем все возможные сочетания букв из списка согласных
for z in s:
for x in s:
for c in s:
for v in s:
for b in s:
for m in s:
for a in s:
slovo = z+x+c+v+b+m+a
f = len([i for i in sochg if i in slovo]) #кол-во сочетаний из списка sochg - СОГЛ+СОГЛ
#*
if f == 0 and slovo[-1]!= ’О’ and slovo[0] != ’И’ and all(slovo.count(i) == 1 for i in s):
n += 1
print(n)
#*
#f == 0: в словах отсутствуют комбинации вида СОГЛ+СОГЛ
#slovo[-1] != ’О’: последняя буква слова не является О
#slovo[0] != ’И’: первая буква не является И
#all(slovo.count(i) == 1 for i in s): каждая буква повторяется в слове ровно один раз
Решение через itertools
from itertools import permutations
count = set()
sogl = ’СЛВ’ # согласные буквы слова
for x in permutations(’УСЛОВИЕ’):
s = ’’.join(x)
# проверка, что слово не начинается на И, не заканчивается на О и нет в слове рядом стоящих согласных букв
if s[0] != ’И’ and s[-1] != ’О’ and all(x1+x2 not in s for x1 in sogl for x2 in sogl):
count.add(s)
print(len(count))