Все семибуквенные слова, в составе которых могут быть только русские буквы Б, Д, Ж, И, О, П, Ф записаны в алфавитном порядке и пронумерованы начиная с 1. Ниже приведено начало списка.
- БББББББ
- ББББББД
- ББББББЖ
- ББББББИ
- ББББББО
- ББББББП
- ББББББФ
- БББББДБ
…
Под каким номером в списке идёт первое слово, которое содержит не более одной буквы Б, ровно две буквы Ф, не содержит ни одной буквы Д и Ж?
Решение руками
Присвоим буквам числовое значение в зависимости от алфавитного порядка. Буквы получат такие значения: Б = 0; Д = 1; Ж = 2; И = 3; О = 4; П = 5; Ф = 6.
Первое слово, которое будет удовлетворять условию выглядит так: БИИИФФ. В числовом представлении это будет выглядеть таким образом: 0333366.
Как можем заметить, наш алфавит записан в 7-ричной системе счисления.Данное значение нам нужно перевести в десятичную систему счисления. Значение будет равняться 58848.
Нужно увеличить данное значение на единицу, поскольку отсчёт в задаче начинается с 1. Ответ: 58849.
Решение через циклы
a = ’БДЖИОПФ’
c = 0
for x1 in a:
for x2 in a:
for x3 in a:
for x4 in a:
for x5 in a:
for x6 in a:
for x7 in a:
s = x1+x2+x3+x4+x5+x6+x7
c += 1
if s.count(’Б’) <= 1 and s.count(’Ф’) == 2 and s.count(’Д’) == 0 and s.count(’Ж’) == 0:
print(c)
Решение через itertools
from itertools import product
c = 0
for x in product(’БДЖИОПФ’, repeat=7):
word = ’’.join(x)
c += 1
if word.count(’Б’) <= 1 and word.count(’Ф’) == 2 and word.count(’Д’) == 0 and word.count(’Ж’) == 0:
print(c)
break