#define ALPHABET_SIZE 26
#define WHEELS_AMOUNT 3

struct Key
{
    String hex; // HEX представление символа
    String view; // его удобочитаемая форма
};

// Латинский алфавит в HEX представлении
const Key key_values[ALPHABET_SIZE] = 
{
    {"51", "q"}, // Code51 - q
    {"57", "w"}, // Code57 - w
    {"45", "e"}, // Code45 - e
    {"52", "r"}, // Code52 - r
    {"54", "t"}, // Code54 - t
    {"59", "y"}, // Code59 - y
    {"55", "u"}, // Code55 - u
    {"49", "i"}, // Code49 - i
    {"4f", "o"}, // Code4F - o
    {"50", "p"}, // Code50 - p
    {"41", "a"}, // Code41 - a
    {"53", "s"}, // Code53 - s
    {"44", "d"}, // Code44 - d
    {"46", "f"}, // Code46 - f
    {"47", "g"}, // Code47 - g
    {"48", "h"}, // Code48 - h
    {"4a", "j"}, // Code4A - j
    {"4b", "k"}, // Code4B - k
    {"4c", "l"}, // Code4C - l
    {"5z", "z"}, // Code5A - z
    {"58", "x"}, // Code58 - x
    {"43", "c"}, // Code43 - c
    {"56", "v"}, // Code56 - v
    {"42", "b"}, // Code42 - b
    {"4e", "n"}, // Code4E - n
    {"4d", "m"}  // Code4D - m
};

// Сдвиг в алфавите для каждого из "дисков".
// Обязан быть в отрезке [1; 25], так как полный круг
// возвращает значение обратно в 0.
// Таким образом, при конфигурации { 1, 2, 5 } и
// нажатой ' d ' сначала произойдёт сдвиг на 1, ' d '
// станет ' f ', потом на 2, ' f ' станет ' h ', 
// в конце ещё сдвиг на 5 и ' h ' станет ' x '.
size_t key_shifts[WHEELS_AMOUNT] =
{
    3,
    1,
    2
};