Задача #1476
Комбинаторика
(С. Якунин) Полина составляет слова, переставляя буквы в слове ДЖАВАСКРИПТ. Сколько слов может Полина составить, если известно, что сумма порядковых номеров гласных букв, в каждом из них, равна 11?
Войдите, чтобы история ответов и статистика сохранялись.
Решение
Ответ
604800
Код #1. Стандартный перебор. Время работы - 141 секунда.
from itertools import permutations
k = 0
for i in set(permutations('ДЖАВАСКРИПТ', r=11)):
s = ''.join(i)
sumpos = 0
for j in range(len(s)):
if s[j]=='А' or s[j]=='И':
sumpos+=(j+1) #порядковый номер на единицу больше, чем индекс
if sumpos==11:
k+=1
print(k)
Код #2. Перебор конфигураций. Время работы - 2 секунды.
from itertools import product
k = 0
for i in product('012', repeat=11):
s = ''.join(i)
if s.count('0')==2 and s.count('2')==1 and \
sum(j for j in range(len(s)) if s[j]=='0' or s[j]=='2')+3==11:
k+=8*7*6*5*4*3*2 #в каждой конфигурации 1 * 1 * 1 * 8! вариантов
print(k)