Николай составляет 7-буквенные коды из букв Н, И, К, О, Л, А, Й. Буква К может использоваться в коде не более одного раза, при этом она не может стоять на первом месте, на последнем месте и рядом с буквой Л. Все остальные буквы могут встречаться произвольное количество раз или не встречаться совсем. Сколько различных кодов может составить Николай?
Пусть буква К не встречается в словах вовсе. Таких слов возможно 6*6*6*6*6*6*6=279936.
Пусть буква К стоит на второй позиции. Количество возможных слов при этом (при условии, что буква Л не стоит рядом) равно: 5*1*5*6*6*6*6=32400. Также буква К может стоять на третьем, четвертом, пятом и шестом месте. Значит, всего слов с буквой К: 32400*5=162000.
Таким образом, всего возможно слов: 162000+279936=441936.
Решение программой (циклы):
ans = set()
alf = ’НИКОЛАЙ’
for x1 in alf:
for x2 in alf:
for x3 in alf:
for x4 in alf:
for x5 in alf:
for x6 in alf:
for x7 in alf:
w = x1 + x2 + x3 + x4 + x5 + x6 + x7
if w.count(’К’) <= 1 and w[-1] != ’К’ and w[0] != ’К’:
if ’КЛ’ not in w and ’ЛК’ not in w:
ans.add(w)
print(len(ans))
Решение программой (itertools):
from itertools import product
ans = set()
alf = ’НИКОЛАЙ’
for w in product(alf, repeat=7):
w = ’’.join(w)
if w.count(’К’) <= 1 and w[-1] != ’К’ and w[0] != ’К’:
if ’КЛ’ not in w and ’ЛК’ not in w:
ans.add(w)
print(len(ans))