Тип 8 № 40983 
Перебор слов и системы счисления.Подсчет количества слов с ограничениями
i
Георгий составляет коды из букв своего имени. Код должен состоять из 7 букв, и каждая буква в нём должна встречаться столько же раз, сколько в имени Георгий. Кроме того, одинаковые буквы в коде не должны стоять рядом. Сколько кодов может составить Георгий?
Решение. Заметим, что алфавит состоит из 6 букв: Г, Е, О, Р, И, Й. Каждая буква должна встречаться в коде один раз, за исключением буквы Г — она может встречаться в коде два раза, но не должна стоять в коде рядом с другой буквой Г.
Пусть одна буква Г стоит на первом месте, а вторая буква Г стоит на третьем месте, тогда всего таких кодов будет 1 · 5 · 1 · 4 · 3 · 2 · 1 = 120. Поскольку вторую букву Г в этом случае можно разместить ещё на 4 других позициях, всего слов, в которых одна из букв Г стоит на первом месте, будет 5 · 120 = 600.
Пусть одна буква Г стоит на втором месте, а вторая буква Г стоит на четвёртом месте, тогда всего таких кодов будет 5 · 1 · 4 · 1 · 3 · 2 · 1 = 120. Поскольку вторую букву Г в этом случае можно разместить ещё на 3 других позициях, всего слов, в которых одна из букв Г стоит на втором месте, будет 4 · 120 = 480.
Заметим, что передвигая первую букву Г на следующую позицию, количество мест, на которых может стоять вторая буква Г, уменьшается на 1. Тогда для случаев, когда буква Г будет стоять на третьей, четвёртой и пятой позициях, количество кодов равно 120 · 3 = 360, 120 · 2 = 240 и 120 · 1 = 120 соответственно.
Таким образом, Георгий может составить 600 + 480 + 360 + 240 + 120 = 1800 кодов.
Ответ: 1800.
Приведём другое решение на языке Python.
import itertools
alphabet = "ГЕОРГИЙ"
ar = itertools.permutations(alphabet, 7) #Размещение
arl = []
for e in ar:
arl.append(list(e))
a = set()
for e in arl:
flag = True
s = ""
for i in range(len(e)-1):
s += e[i]
if e[i] == e[i + 1]:
flag = False
if flag:
a.add(s)
print(len(a))
Приведём решение Ильи Андрианова на языке Python.
from itertools import permutations
count = set()
for s in permutations('георгий'):
slovo = ''.join(s)
if 'гг' not in slovo:
count.add(slovo)
print(len(count))
Ответ: 1800