При входе в личный кабинет на терминале требуется ввести пятизначный пароль из 0 и 1. Для этого на терминале имеются 5 кнопок и 5 окошек. При нажатии на кнопку в ей соответствующем окошке текущий символ заменяется на противоположный (то есть, если в окошке сейчас горит цифра 1, то после нажатия на кнопку там будет 0, и наоборот). Сейчас во всех окошках выставлена 1. Какое наименьшее количество нажатий кнопок потребуется, чтобы перебрать все возможные варианты пароля?
Всего имеется пятизначных паролей из 0 и 1. Один такой пароль 11111 уже набран, значит, нам остается перебрать еще 31 вариант, для чего потребуется по крайней мере 31 нажатие кнопок. Покажем, что 31 нажатия действительно хватит. Для этого все пятизначные наборы упорядочим так, чтобы соседние наборы отличались только в одном символе (классический код Грея). Тогда переход от одного набора к соседнему будет осуществляться нажатием одной кнопки, и всего потребуется как раз 31 нажатие.
Упорядочить так наборы можно многими способами. Одну из возможных идей проиллюстрируем на примере трехзначных паролей, которые будем интерпретировать как координаты вершин трехмерного куба со стороной 1. Координаты вершин, лежащих на одном ребре, как раз отличаются только в одном символе. Значит, если, двигаясь вдоль ребер, мы обойдем все вершины куба, то тем самым получим требуемое упорядочение. Отметим, что все вершины лежат или на верхней А, или на нижней грани В (рис.). То есть, можно сказать, что наш трехмерный куб представляет собой сумму двух граней (или дбухмерных кубов) А и В. Начнем обход, например, с вершины 111. Сначала обойдем вершины двумерного куба В (при этом последняя цифра пароля (координата z) равна 1), затем переместимся на куб А и обойдем его вершины. Получим искомую последовательность паролей:
111 011 001 101 100 110 010 000.
Несложно теперь проделать тоже самое и для пятизначных паролей (пятимерный куб равен сумме двух четырехмерных кубов, а четырехмерный куб равен сумме двух трехмерных): 1) сначала обходим двухмерный куб, то есть меняются первые две цифры, а три
последние так и остаются равными 1:
11111 01111 00111 10111.
Переходим на вторую грань: теперь третья цифра 0, а последние две по-прежнему 1:
10011 11011 01011 00011.
Обход одного трехмерного куба закончили. Переходим на второй трехмерный куб́ (предпоследняя цифра стала 0):
00001 01001 11001 10001 10101 00101 01101 11101.
Один четырехмерный куб обошли. Переходим на второй четырехмерный куб, то есть, наконец, последняя цифра становится
11100 01100 00100 10100 10000 11000 01000 00000 00010 01010 11010 10010 10110 00110 011 10 11110.
Ответ: 31 нажатие. Пароли можно перебирать, например, в таком порядке:
1111101111001111011110011110110101100011000010100111001100011010100101011 0111101111000110000100101001000011000010000000000010010101101010010101100 01100111011110.