Отличный вопрос - принимая приведенные выше предложения, вот формулы для расстояния от ключа i до ключа j:
Вес = расстояние * a + переключатель * b + тот же * c + shift * d + странный * e + start * f
Расстояние - это значение, остальные значения равны 0/1.
Расстояние - наложив точную сетку на QWERTY-клавиатуру, найдите x, y
и рассчитать расстояние. Расстояние имеет положительный вес. Если комбинация букв используется разными руками (например, aj, sk, wu ...), расстояние равно нулю.
Switch - отрицательный вес; переключение хорошо
То же самое - aq, qa, az, za используют один и тот же палец. Это же положительно
Сдвиг - все, что смещается, положительно и очень плохо
Странно - я не знаю $ или ~ плохо, потому что вы должны смотреть на клавиатуру.
Начало - asdfjkl, начиная или заканчивая. Вероятно, отрицательно и хорошо, так как ваши пальцы находятся в состоянии покоя.
Коэффициенты - просто начните до тех пор, пока относительные значения кажутся разумными.
Если вы ДЕЙСТВИТЕЛЬНО хотите придумать - попросите кого-нибудь набрать несколько десятков наборов цифр, используйте секундомер и установите регрессионную модель.
Реализация - скажем, у нас есть пароль из шести символов.
Теперь мне нужно самое низкое значение для шести символов, начиная с каждой буквы. Представьте себе массив ваших N ключей в столбцах. Теперь представьте шесть столбцов. Ваш самый короткий пароль - это самый короткий путь через шесть столбцов (с допустимыми циклами). Возможно, вам придется добавить некоторую логику для устранения циклов, но это должно быть хорошим первым проходом. (Мне здесь лень - вероятно, есть теоретическая формулировка графа, которая решает эту проблему.)
Бьюсь об заклад, кто-то делал это раньше - особенно часть нажатия клавиш.