Из букв слова Р,Е,С,Т,О,Р,А,Н, составляются 8-буквенные последовательности. Сколько можно составить различных последовательностей таких, что каждая буква используется столько же раз, сколько она встречается в слове РЕСТОРАН и они не содержат сочетание букв АТ?
Всего существует последовательностей (поделили на 2!, так как буква Р используется в слове два раза, поэтому так мы исключаем повторения)
Найдем количество последовательнотсей с сочетанием букв АТ:
1. А Т * * * * * *
2. * А Т * * * * *
3. * * А Т * * * *
4. * * * A T * * *
5. * * * * A T * *
6. * * * * * A T *
7. * * * * * * A T
Получается есть 7 вариантов перестановок букв АТ, для каждого варианта постановки АТ существует последовательностей, но не забываем поделить на 2!, чтобы исключить повторения из-за двух букв Р, значит 720/2 = 360 последовательностей.
Тогда существует последовательностей, которые содержат сочетание АТ.
Значит для вычисления итогового ответа достаточно вычесть из всех последовательностей последовательности с сочетанием букв АТ:
20160 — 2520 = 17640 последовательностей без сочетания букв АТ.
Решение программой (циклы):
ans = set()
word = ’РЕСТОРАН’
alf = set(’РЕСТОРАН’)
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:
for x8 in alf:
w = x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8
if ’АТ’ not in w:
f = 1 # Переменная-флаг
for i in w:
if w.count(i) != word.count(i):
f = 0
break
# Только если флаг остался 1
if f:
ans.add(w)
print(len(ans))
Решение программой (itertools):
from itertools import product
word = ’РЕСТОРАН’
alf = set(’РЕСТОРАН’)
for w in product(alf, repeat=8):
w = ’’.join(w)
if ’АТ’ not in w:
f = 1 # Переменная-флаг
for i in w:
if w.count(i) != word.count(i):
f = 0
break
# Только если флаг остался 1
if f:
ans.add(w)
print(len(ans))