В задании 8 есть несколько прототипов. В этой статье я хочу разобраться с типом задач, в которых требуется из предложенных букв решить различные комбинаторные задачки.
Рассмотрим несколько заданий для примера.
Чтобы легко решать подобные задачи, нужно понять, что за N количеством букв "прячется" система счисления с основанием N.
Вместо букв (в алфавитном порядке) будем использовать цифры (0,1,2,3). Тогда букве А будет соответствовать 0, Б - 1, 3 - 2, И-3. И искомое слово ИЗБА будет выглядеть как число 3210.
Начало списка, выраженное через числа будет выглядеть так:
- 0000 (0 в десятичной СС)
- 0001 (1 в десятичной СС)
- 0002 (2 в десятичной СС)
- 0003 (3 в десятичной СС)
- 0010 (4 в десятичной СС)
...
Это ни что иное, как числа в системе счисления с основанием 4, идущие по порядку с шагом 1. Так как список устроен так, что числу 0 соответствует номер списка 1, 1 — номер списка 2 и т.д., понятно, что номер в списке искомого числа будет равен самому этому числу в десятичной системе счисления плюс 1.
Итак, мы готовы получить ответ на это задание. Запускаем Pycharm и пишем:
print ( int('3210',4)+1)
Получаем ответ: 229.
Всего лишь одна строка кода и никаких переборов и библиотек itertools.
Аналогичное задание:
Букве М будет соответствовать цифра 1, и первое по порядку слово начинающееся с М будет выглядеть как '1000'
print ( int('1000',4)+1)
Дает ответ 65.
Следующее:
Расположив буквы в алфавитном порядке, получим: К-0, О-1, С-2, У-3, Ф-4.
Последнее слово (без условий) выглядит как ФФФФФ, но букву Ф использовать нельзя. Без Ф самое последнее слово будет выглядеть как УУУУУ. Но букв У может быть только 2. Учитывая все условия, получаем, что искомое слово УУССС. Оно соответствует числу 33222 в системе счисления по основанию 5.
print ( int('33222',5)+1)
Ответ: 2313.
Решите сами: