Задание 8 КЕГЭ: сколько слов по правилу — как перебрать itertools.product?
Типичное восьмое: «Сколькоershesть слов длины 5 из букв К, О, Т, в которых не две гласные подряд» и подобное. Считать комбинаторикой страшно ошибиться. Как тупо перебрать все слова на Python и просто посчитать подходящие?
4 ответа
Генеришь все слова product, фильтруешь условие, считаешь длину.
from itertools import product
alphabet = 'КОТ'
count = 0
for w in product(alphabet, repeat=5):
word = ''.join(w)
# пример условия: не начинается с гласной и нет двух гласных подряд
glas = set('О')
if word[0] in glas:
continue
if any(word[i] in glas and word[i+1] in glas for i in range(4)):
continue
count += 1
print(count)
Плюс подхода: переводишь словесное условие напрямую в if-ы, не выводя формулу. Размер перебора маленький (3**5 = 243), считается мгновенно. Главное — аккуратно прочитать ВСЕ ограничения из условия и каждое превратить в проверку.
itertools.product(alphabet, repeat=n), потом if под каждое условие и += 1.
Осторожно с длиной: при repeat=10 и алфавите из 10 букв это 10 миллиардов — не успеет. Но в реальных задачах 8 перебор почти всегда влезает, там обычно ≤ нескольких миллионов.
Перебором.