Я решил в точности как hripunov, но я подошел к решению более формально и расписал подробный алгоритм для Али-Бабы, чтобы ему не пришлось долго думать.

Обозначим положения переключателей: Н - нижнее, В - верхнее.
Текущее состояние обозначим (n,v), n - кол-во нижних переключателей, v - кол-во верхних.
Например, (1,3) - это 1 Н и 3В и изобразим так:
НВ
ВВ
Сначала переведем из неопределенного состояния
(?,?) -> (1,3) за 2 хода.
1)
(?,?) -> (1,3) или (2,2)Суем руки по диагонали и меняем на
НН -> ВВ
ВВ -> ВВ
ВН -> ВВ
НВ -> ВВ
Получаем:
В*
*В
* - неизвестные значения
Получили состояние (2,2) или (1,3).
2)
(1,3) или (2,2) -> (1,3)Суем руки в соседние и меняем:
НН - не может быть
НВ -> ВВ
ВН -> ВВ
ВВ оставляем
Таким образом получаем состояние (1,3).
3)
(1,3)->(2,2)Суем руки в соседние и меняем:
НВ -> ВВ - открылось
ВН -> ВВ - открылось
ВВ -> НВ - количество Н увеличилось на 1
НН - не может быть
4)
(2,2) -> (2,2) не диагональное(2,2) не диагональное - это:
ВВ НВ НН ВН
НН НВ ВВ ВН
Суем руки по диагонали и заменяем:
ВВ -> НН - открылось
НН -> ВВ - открылось
ВН, НВ оставляем
5)
(2,2) не диагональное -> (2,2) диагональноет.е. в такие
ВН НВ
НВ ВН
Суем руки в соседние и меняем:
ВВ -> НН - открылось
НН -> ВВ - открылось
ВН -> НВ
НВ -> ВН
6)
(2,2) диагональное -> открытоеСуем руки по диагонали, там возможно только 2 варианта:
ВВ -> НН - открылось
НН -> ВВ - открылось
Таким образом требуется максимум 6 ходов.