8.02 Подсчет количества слов/чисел
Ошибка.
Попробуйте повторить позже
Виктор составляет слова длины 6 из букв русского алфавита в верхнем и нижнем регистрах. Все составляемые слова являются палиндромами, в которых все буквы могут встречаться любое количество раз, а символ Й может стоять только рядом с другим символом Й. Сколько слов может составить Виктор?
Так как нам нужны палиндромы длины 6, можем составлять только слова длины 3 и мысленно их отзеркаливать, так и будут получаться палиндромы.
Слова без Й могут быть любыми, слова с И подчиняются определенным правилам:
*** -> ****** - подходит:
**Й -> **ЙЙ** - подходит:
*Й* -> *Й**Й* - не подходит
Й** -> Й****Й - не подходит
*ЙЙ -> *ЙЙЙЙ* - подходит:
Й*Й -> Й*ЙЙ*Й - не подходит
ЙЙ* -> ЙЙ**ЙЙ - подходит:
ЙЙЙ -> ЙЙЙЙЙЙ - подходит:
Если сложим все эти выражения, получим ответ: .
Идея решения через itertools:
Мы разбиваем задачу на части с учётом свойства палиндрома и ограничения для буквы "Й".
1. Так как слово палиндром длиной 6, нам достаточно сформировать первые 3 буквы. Последние 3 буквы будут зеркальным отражением первых 3 букв. Это уменьшает количество перебираемых комбинаций и упрощает проверку условий.
2. Алфавит включает все буквы русского языка в верхнем и нижнем регистре. Мы объединяем верхний и нижний регистр в одну строку для генерации комбинаций.
3. Для каждой комбинации первых трёх букв проверяем условие для буквы "Й":
- если в слове есть только одна Й, она должна находиться на последнем месте первой половины (чтобы после зеркалирования она была рядом с другой "Й"),
- если две Й, они должны быть рядом (чтобы в палиндроме не нарушалось правило),
- комбинации с неподходящим расположением "Й"отбрасываются.
4. Все подходящие комбинации добавляются в множество для учёта уникальных слов.
Решение через itertools:
from itertools import product # Импортируем функцию product для генерации комбинаций # Алфавит в верхнем регистре s = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ" # Добавляем также алфавит в нижнем регистре s = s + s.lower() ans = set() # Множество для хранения уникальных палиндромов # Палиндром длиной 6 - достаточно сгенерировать первые 3 буквы for i in product(s, repeat=3): word_ = "".join(i) # Преобразуем кортеж в строку первых 3 букв word = word_.upper() # Работаем с верхним регистром для проверки "Й" # Пропускаем неподходящие слова с буквой "Й" # Условие: одна "Й" не на последнем месте или две "Й" не рядом if "Й" in word: if word.count("Й") == 1 and word[-1] != "Й" or word.count("Й") == 2 and word[1] != "Й": continue ans.add(word_) # Добавляем допустимую комбинацию в множество print(len(ans)) # Выводим количество уникальных палиндромов
Специальные программы

Программа
лояльности v2.0
Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!
Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное онлайн-обучение
Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты
Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей
Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ
Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!