При входе в личный кабинет на терминале требуется ввести четырехзначный пароль из 0 и 1. Для этого на терминале имеются 4 кнопки и 4 окошка. При нажатии на кнопку в ей соответствующем окощке текущий символ заменяется на противоположный (то есть если в окошке сейчас горит цифра 1, то после нажатия на кнопку там будет 0, и наоборот). Сейчас во всех окошках выставлена 1. Какое наименьшее количество нажатий кнопок потребуется, чтобы перебрать все возможные варианты пароля?
Всего имеется четырехзначных паролей из 0 и 1. Один такой пароль 1111 уже набран, значит, нам остается перебрать оставшиеся 15 вариантов, для чего потребуется по крайней мере 15 нажатий кнопок. Покажем, что 15 нажатий действительно хватит. Для этого все четырехзначные наборы упорядочим так, чтобы соседние наборы отличались только в одном символе (классический код Грея). Тогда переход от одного набора к соседнему будет осуществляться нажатием одной кнопки, и всего потребуется как раз 15 нажатий.
Упорядочить так наборы можно многими способами. Одну из возможных идей проиллюстрируем на примере трехзначных паролей, которые будем интерпретировать как координаты вершин трехмерного куба со стороной 1. Координаты вершин, лежащих на одном ребре, как раз отличаются только в одном символе. Значит, если, двигаясь вдоль ребер, мы обойдем все вершины куба, то тем самым получим требуемое упорядочение. Отметим, что все вершины лежат или на верхней A, или на нижней грани B. То есть, можно сказать, что наш трехмерный куб представляет собой сумму двух граней (или двухмерных кубов) А и В. Начнем обход, например, с вершины 111. Сначала обойдем вершины двумерного куба В (при этом последняя цифра пароля (координата z) равна 1), затем переместимся на куб A и обойдем его вершины. Получим искомую последовательность паролей:
111 011 001 101 100 110 010 000.
Несложно теперь проделать тоже самое и для четырехзначных паролей (четырехмерный куб равен сумме двух трехмерных): 1) сначала обходим двухмерный куб, то есть меняются первые две цифры, а две последние так и остаются равными 1:
1111 0111 0011 1011.
Переходим на вторую грань: теперь третья цифра 0, а последняя по-прежнему 1:
1001 1101 0101 0001.
Обход одного трехмерного куба закончили. Переходим на второй трехмерный куб:
0000 0100 1100 1000 1010 0010 0110 1110.
Ответ: 15 нажатий. Пароли можно перебирать, например, в таком порядке: 1111 0111 0011 1011 1001 1101 0101 0001 0000 0100 1100 1000 1010 0010 0110 1110.