Условие
Вася составляет пятибуквенные слова из букв слова УДАЧА. Каждая буква может не входить или входить в слово многократно. Первая буква может быть только гласной. Все различные подходящие слова записали в алфавитном порядке и пронумеровали, начиная с 1. Под каким номером стоит слово УДАЧА?
Решение №1
Обратим внимание на количество разнообразных букв в слове УДАЧА — их четыре: У, Д, А и Ч. Расположим буквы в алфавитном порядке и заменим на цифры: А — 0, Д — 1, У — 2 и Ч — 3. Таким образом получим четверичную систему счисления. Замени буквы слова УДАЧА соответствующими цифрами и получим число 210304.
Переведем число в десятичную систему счисления:
210304 = 2 · 44 + 1 · 43 + 0 · 42 + 3 · 41 + 0 · 40
210304 = 58810
Так как нумерация начинается с 1, а первое число 00000, то для того чтобы вычислить номер полученного числа необходимо прибавить единицу — получим 589 — позиция слова. Так как слово не может начинаться на согласную букву, нужно исключить все слова на букву Д и Ч. Так как слова на букву Ч не изменят нумерацию слов на букву У, исключим только слова начинающиеся на букву Д. Для этого узнаем сколько таких слов:
Д4444
Цифрой четыре обозначено сколько различных букв может быть на каждой позиции. Для того чтобы узнать сколько в итоге слов получилось — перемножим числовые значения и получим 256.
В итоге вычтем из 589 все слова на букву Д, то есть 256 и получим 333 — позиция слова УДАЧА.
Решение №2
Напишем программу определения номера слова УДАЧА.
Определим две строки — одна будет состоять из букв расположенных в алфавитном порядке, с помощью которых составляются слова, вторая из гласных букв.
#начало фрагмента
s = 'АДУЧ'
gl = 'АУ'
#конец фрагмента
Подключим функцию product() из библиотеки itertools. Она нам понадобится, для того, чтобы составлять пятибуквенные слова.
#начало фрагмента
from itertools import product
#конец фрагмента
В целом product() можно не использовать, а воспользоваться вложенными циклами for. Но такой способ решения приведет к существенному загромождению кода.
Напишем код для генерации слов. Нам понадобятся пять переменных для каждой позиции буквы в слове: a1, a2, a3, a4 и a5. В каждую переменную будут подставляться символы из строки s. Полученный набор символов мы будем сохранять в строку o.
Далее необходимо сделать проверку первой буквы, нам важно, чтобы она была гласной. Если слово начинается на гласную букву оно нам подходит и мы его засчитываем.
#начало фрагмента
for a1, a2, a3, a4, a5 in product(s, repeat=5):
o = a1 + a2 + a3 + a4 + a5
if o[0] in gl:
sl += 1
#конец фрагмента
Как только полученная строка стала словом «УДАЧА«, выводим на экран состояние счетчика и прекращаем выполнение функции product().
#начало фрагмента
if o == 'УДАЧА':
print(sl)
break
#конец фрагмента
Листинг программы
from itertools import product
s = 'АДУЧ'
gl = 'АУ'
sl = 0
for a1, a2, a3, a4, a5 in product(s, repeat=5):
o = a1 + a2 + a3 + a4 + a5
if o[0] in gl:
sl += 1
if o == 'УДАЧА':
print(sl)
break