Джон составляет список всех возможных кодов, составленных из заглавных латинских букв. Сначала он выписывает в алфавитном порядке все коды, состоящие из одного символа (A, B, …, Z), затем — тоже в алфавитном порядке — коды из двух символов (AA, AB, …, AZ, BA, BB, … ZZ), далее идут трёхсимвольные коды (AAA, AAB, …, ZZZ) и так далее.
Под каким номером окажется в этом списке код FDECBA?
Приведём аналитическое Юрия Красильникова решение.
Слово FDECBA можно рассматривать как число 534210, записанное в системе счисления по основанию 26. Перед ним следуют 26 слов длины 1, 262 слов длины 2, ..., 265 слов длины 5.
Поэтому ответ можно получить с помощью следующей программы:
print(int('534210',26)+1+sum(26**p for p in range(1,6)))
Единица прибавляется потому, что слову AAAAAA соответствует число 000000 со значением 0, но нумерация слов в списке начинается с 1.
Приведём решение на языке Python.
from itertools import product
count = 1
alf = sorted('QWERTYUIOPASDFGHJKLZXCVBNM')
for n in range(1,7):
for i in product(alf,repeat = n):
if "".join(i)=="FDECBA":
print(count)
break
count += 1
Ответ: 73206121.
Приведём решение Сергея Донец на языке PascalABC.NET.
begin
var alf:='A'..'Z';
var count := 1;
// Подсчет всех комбинаций длиной от 1 до 5 символов
for var n := 1 to 5 do
count+=alf.Cartesian(n).Count;
// Поиск среди комбинаций длиной 6 символов
alf.Cartesian(6).ForEach( ar->
begin
if ar.JoinToString() = 'FDECBA' then
begin
Print(count); // 73206121
Halt;
end;
count += 1;
end );
end.

