blob: a41a9b3a99c63890b9716902c93a6d2f9dfc555c [file] [log] [blame]
// generated by scripts/build_keyboard_adjacency_graphs.py
#include <zxcvbn/adjacency_graphs.hpp>
#include <array>
#include <initializer_list>
#include <utility>
#include "base/no_destructor.h"
namespace zxcvbn {
extern constexpr degree_t KEYBOARD_AVERAGE_DEGREE = 4.595745;
// slightly different for keypad/mac keypad, but close enough
extern constexpr degree_t KEYPAD_AVERAGE_DEGREE = 5.066667;
extern constexpr std::size_t KEYBOARD_STARTING_POSITIONS = 94;
extern constexpr std::size_t KEYPAD_STARTING_POSITIONS = 15;
const Graphs& graphs() {
static base::NoDestructor<Graphs> graphs({
{GraphTag::QWERTY, {
{"!", {"`~", {}, {}, "2@", "qQ", {}}},
{"\"", {";:", "[{", "]}", {}, {}, "/?"}},
{"#", {"2@", {}, {}, "4$", "eE", "wW"}},
{"$", {"3#", {}, {}, "5%", "rR", "eE"}},
{"%", {"4$", {}, {}, "6^", "tT", "rR"}},
{"&", {"6^", {}, {}, "8*", "uU", "yY"}},
{"'", {";:", "[{", "]}", {}, {}, "/?"}},
{"(", {"8*", {}, {}, "0)", "oO", "iI"}},
{")", {"9(", {}, {}, "-_", "pP", "oO"}},
{"*", {"7&", {}, {}, "9(", "iI", "uU"}},
{"+", {"-_", {}, {}, {}, "]}", "[{"}},
{",", {"mM", "kK", "lL", ".>", {}, {}}},
{"-", {"0)", {}, {}, "=+", "[{", "pP"}},
{".", {",<", "lL", ";:", "/?", {}, {}}},
{"/", {".>", ";:", "'\"", {}, {}, {}}},
{"0", {"9(", {}, {}, "-_", "pP", "oO"}},
{"1", {"`~", {}, {}, "2@", "qQ", {}}},
{"2", {"1!", {}, {}, "3#", "wW", "qQ"}},
{"3", {"2@", {}, {}, "4$", "eE", "wW"}},
{"4", {"3#", {}, {}, "5%", "rR", "eE"}},
{"5", {"4$", {}, {}, "6^", "tT", "rR"}},
{"6", {"5%", {}, {}, "7&", "yY", "tT"}},
{"7", {"6^", {}, {}, "8*", "uU", "yY"}},
{"8", {"7&", {}, {}, "9(", "iI", "uU"}},
{"9", {"8*", {}, {}, "0)", "oO", "iI"}},
{":", {"lL", "pP", "[{", "'\"", "/?", ".>"}},
{";", {"lL", "pP", "[{", "'\"", "/?", ".>"}},
{"<", {"mM", "kK", "lL", ".>", {}, {}}},
{"=", {"-_", {}, {}, {}, "]}", "[{"}},
{">", {",<", "lL", ";:", "/?", {}, {}}},
{"?", {".>", ";:", "'\"", {}, {}, {}}},
{"@", {"1!", {}, {}, "3#", "wW", "qQ"}},
{"A", {{}, "qQ", "wW", "sS", "zZ", {}}},
{"B", {"vV", "gG", "hH", "nN", {}, {}}},
{"C", {"xX", "dD", "fF", "vV", {}, {}}},
{"D", {"sS", "eE", "rR", "fF", "cC", "xX"}},
{"E", {"wW", "3#", "4$", "rR", "dD", "sS"}},
{"F", {"dD", "rR", "tT", "gG", "vV", "cC"}},
{"G", {"fF", "tT", "yY", "hH", "bB", "vV"}},
{"H", {"gG", "yY", "uU", "jJ", "nN", "bB"}},
{"I", {"uU", "8*", "9(", "oO", "kK", "jJ"}},
{"J", {"hH", "uU", "iI", "kK", "mM", "nN"}},
{"K", {"jJ", "iI", "oO", "lL", ",<", "mM"}},
{"L", {"kK", "oO", "pP", ";:", ".>", ",<"}},
{"M", {"nN", "jJ", "kK", ",<", {}, {}}},
{"N", {"bB", "hH", "jJ", "mM", {}, {}}},
{"O", {"iI", "9(", "0)", "pP", "lL", "kK"}},
{"P", {"oO", "0)", "-_", "[{", ";:", "lL"}},
{"Q", {{}, "1!", "2@", "wW", "aA", {}}},
{"R", {"eE", "4$", "5%", "tT", "fF", "dD"}},
{"S", {"aA", "wW", "eE", "dD", "xX", "zZ"}},
{"T", {"rR", "5%", "6^", "yY", "gG", "fF"}},
{"U", {"yY", "7&", "8*", "iI", "jJ", "hH"}},
{"V", {"cC", "fF", "gG", "bB", {}, {}}},
{"W", {"qQ", "2@", "3#", "eE", "sS", "aA"}},
{"X", {"zZ", "sS", "dD", "cC", {}, {}}},
{"Y", {"tT", "6^", "7&", "uU", "hH", "gG"}},
{"Z", {{}, "aA", "sS", "xX", {}, {}}},
{"[", {"pP", "-_", "=+", "]}", "'\"", ";:"}},
{"\\", {"]}", {}, {}, {}, {}, {}}},
{"]", {"[{", "=+", {}, "\\|", {}, "'\""}},
{"^", {"5%", {}, {}, "7&", "yY", "tT"}},
{"_", {"0)", {}, {}, "=+", "[{", "pP"}},
{"`", {{}, {}, {}, "1!", {}, {}}},
{"a", {{}, "qQ", "wW", "sS", "zZ", {}}},
{"b", {"vV", "gG", "hH", "nN", {}, {}}},
{"c", {"xX", "dD", "fF", "vV", {}, {}}},
{"d", {"sS", "eE", "rR", "fF", "cC", "xX"}},
{"e", {"wW", "3#", "4$", "rR", "dD", "sS"}},
{"f", {"dD", "rR", "tT", "gG", "vV", "cC"}},
{"g", {"fF", "tT", "yY", "hH", "bB", "vV"}},
{"h", {"gG", "yY", "uU", "jJ", "nN", "bB"}},
{"i", {"uU", "8*", "9(", "oO", "kK", "jJ"}},
{"j", {"hH", "uU", "iI", "kK", "mM", "nN"}},
{"k", {"jJ", "iI", "oO", "lL", ",<", "mM"}},
{"l", {"kK", "oO", "pP", ";:", ".>", ",<"}},
{"m", {"nN", "jJ", "kK", ",<", {}, {}}},
{"n", {"bB", "hH", "jJ", "mM", {}, {}}},
{"o", {"iI", "9(", "0)", "pP", "lL", "kK"}},
{"p", {"oO", "0)", "-_", "[{", ";:", "lL"}},
{"q", {{}, "1!", "2@", "wW", "aA", {}}},
{"r", {"eE", "4$", "5%", "tT", "fF", "dD"}},
{"s", {"aA", "wW", "eE", "dD", "xX", "zZ"}},
{"t", {"rR", "5%", "6^", "yY", "gG", "fF"}},
{"u", {"yY", "7&", "8*", "iI", "jJ", "hH"}},
{"v", {"cC", "fF", "gG", "bB", {}, {}}},
{"w", {"qQ", "2@", "3#", "eE", "sS", "aA"}},
{"x", {"zZ", "sS", "dD", "cC", {}, {}}},
{"y", {"tT", "6^", "7&", "uU", "hH", "gG"}},
{"z", {{}, "aA", "sS", "xX", {}, {}}},
{"{", {"pP", "-_", "=+", "]}", "'\"", ";:"}},
{"|", {"]}", {}, {}, {}, {}, {}}},
{"}", {"[{", "=+", {}, "\\|", {}, "'\""}},
{"~", {{}, {}, {}, "1!", {}, {}}},
}},
{GraphTag::DVORAK, {
{"!", {"`~", {}, {}, "2@", "'\"", {}}},
{"\"", {{}, "1!", "2@", ",<", "aA", {}}},
{"#", {"2@", {}, {}, "4$", ".>", ",<"}},
{"$", {"3#", {}, {}, "5%", "pP", ".>"}},
{"%", {"4$", {}, {}, "6^", "yY", "pP"}},
{"&", {"6^", {}, {}, "8*", "gG", "fF"}},
{"'", {{}, "1!", "2@", ",<", "aA", {}}},
{"(", {"8*", {}, {}, "0)", "rR", "cC"}},
{")", {"9(", {}, {}, "[{", "lL", "rR"}},
{"*", {"7&", {}, {}, "9(", "cC", "gG"}},
{"+", {"/?", "]}", {}, "\\|", {}, "-_"}},
{",", {"'\"", "2@", "3#", ".>", "oO", "aA"}},
{"-", {"sS", "/?", "=+", {}, {}, "zZ"}},
{".", {",<", "3#", "4$", "pP", "eE", "oO"}},
{"/", {"lL", "[{", "]}", "=+", "-_", "sS"}},
{"0", {"9(", {}, {}, "[{", "lL", "rR"}},
{"1", {"`~", {}, {}, "2@", "'\"", {}}},
{"2", {"1!", {}, {}, "3#", ",<", "'\""}},
{"3", {"2@", {}, {}, "4$", ".>", ",<"}},
{"4", {"3#", {}, {}, "5%", "pP", ".>"}},
{"5", {"4$", {}, {}, "6^", "yY", "pP"}},
{"6", {"5%", {}, {}, "7&", "fF", "yY"}},
{"7", {"6^", {}, {}, "8*", "gG", "fF"}},
{"8", {"7&", {}, {}, "9(", "cC", "gG"}},
{"9", {"8*", {}, {}, "0)", "rR", "cC"}},
{":", {{}, "aA", "oO", "qQ", {}, {}}},
{";", {{}, "aA", "oO", "qQ", {}, {}}},
{"<", {"'\"", "2@", "3#", ".>", "oO", "aA"}},
{"=", {"/?", "]}", {}, "\\|", {}, "-_"}},
{">", {",<", "3#", "4$", "pP", "eE", "oO"}},
{"?", {"lL", "[{", "]}", "=+", "-_", "sS"}},
{"@", {"1!", {}, {}, "3#", ",<", "'\""}},
{"A", {{}, "'\"", ",<", "oO", ";:", {}}},
{"B", {"xX", "dD", "hH", "mM", {}, {}}},
{"C", {"gG", "8*", "9(", "rR", "tT", "hH"}},
{"D", {"iI", "fF", "gG", "hH", "bB", "xX"}},
{"E", {"oO", ".>", "pP", "uU", "jJ", "qQ"}},
{"F", {"yY", "6^", "7&", "gG", "dD", "iI"}},
{"G", {"fF", "7&", "8*", "cC", "hH", "dD"}},
{"H", {"dD", "gG", "cC", "tT", "mM", "bB"}},
{"I", {"uU", "yY", "fF", "dD", "xX", "kK"}},
{"J", {"qQ", "eE", "uU", "kK", {}, {}}},
{"K", {"jJ", "uU", "iI", "xX", {}, {}}},
{"L", {"rR", "0)", "[{", "/?", "sS", "nN"}},
{"M", {"bB", "hH", "tT", "wW", {}, {}}},
{"N", {"tT", "rR", "lL", "sS", "vV", "wW"}},
{"O", {"aA", ",<", ".>", "eE", "qQ", ";:"}},
{"P", {".>", "4$", "5%", "yY", "uU", "eE"}},
{"Q", {";:", "oO", "eE", "jJ", {}, {}}},
{"R", {"cC", "9(", "0)", "lL", "nN", "tT"}},
{"S", {"nN", "lL", "/?", "-_", "zZ", "vV"}},
{"T", {"hH", "cC", "rR", "nN", "wW", "mM"}},
{"U", {"eE", "pP", "yY", "iI", "kK", "jJ"}},
{"V", {"wW", "nN", "sS", "zZ", {}, {}}},
{"W", {"mM", "tT", "nN", "vV", {}, {}}},
{"X", {"kK", "iI", "dD", "bB", {}, {}}},
{"Y", {"pP", "5%", "6^", "fF", "iI", "uU"}},
{"Z", {"vV", "sS", "-_", {}, {}, {}}},
{"[", {"0)", {}, {}, "]}", "/?", "lL"}},
{"\\", {"=+", {}, {}, {}, {}, {}}},
{"]", {"[{", {}, {}, {}, "=+", "/?"}},
{"^", {"5%", {}, {}, "7&", "fF", "yY"}},
{"_", {"sS", "/?", "=+", {}, {}, "zZ"}},
{"`", {{}, {}, {}, "1!", {}, {}}},
{"a", {{}, "'\"", ",<", "oO", ";:", {}}},
{"b", {"xX", "dD", "hH", "mM", {}, {}}},
{"c", {"gG", "8*", "9(", "rR", "tT", "hH"}},
{"d", {"iI", "fF", "gG", "hH", "bB", "xX"}},
{"e", {"oO", ".>", "pP", "uU", "jJ", "qQ"}},
{"f", {"yY", "6^", "7&", "gG", "dD", "iI"}},
{"g", {"fF", "7&", "8*", "cC", "hH", "dD"}},
{"h", {"dD", "gG", "cC", "tT", "mM", "bB"}},
{"i", {"uU", "yY", "fF", "dD", "xX", "kK"}},
{"j", {"qQ", "eE", "uU", "kK", {}, {}}},
{"k", {"jJ", "uU", "iI", "xX", {}, {}}},
{"l", {"rR", "0)", "[{", "/?", "sS", "nN"}},
{"m", {"bB", "hH", "tT", "wW", {}, {}}},
{"n", {"tT", "rR", "lL", "sS", "vV", "wW"}},
{"o", {"aA", ",<", ".>", "eE", "qQ", ";:"}},
{"p", {".>", "4$", "5%", "yY", "uU", "eE"}},
{"q", {";:", "oO", "eE", "jJ", {}, {}}},
{"r", {"cC", "9(", "0)", "lL", "nN", "tT"}},
{"s", {"nN", "lL", "/?", "-_", "zZ", "vV"}},
{"t", {"hH", "cC", "rR", "nN", "wW", "mM"}},
{"u", {"eE", "pP", "yY", "iI", "kK", "jJ"}},
{"v", {"wW", "nN", "sS", "zZ", {}, {}}},
{"w", {"mM", "tT", "nN", "vV", {}, {}}},
{"x", {"kK", "iI", "dD", "bB", {}, {}}},
{"y", {"pP", "5%", "6^", "fF", "iI", "uU"}},
{"z", {"vV", "sS", "-_", {}, {}, {}}},
{"{", {"0)", {}, {}, "]}", "/?", "lL"}},
{"|", {"=+", {}, {}, {}, {}, {}}},
{"}", {"[{", {}, {}, {}, "=+", "/?"}},
{"~", {{}, {}, {}, "1!", {}, {}}},
}},
{GraphTag::KEYPAD, {
{"*", {"/", {}, {}, {}, "-", "+", "9", "8"}},
{"+", {"9", "*", "-", {}, {}, {}, {}, "6"}},
{"-", {"*", {}, {}, {}, {}, {}, "+", "9"}},
{".", {"0", "2", "3", {}, {}, {}, {}, {}}},
{"/", {{}, {}, {}, {}, "*", "9", "8", "7"}},
{"0", {{}, "1", "2", "3", ".", {}, {}, {}}},
{"1", {{}, {}, "4", "5", "2", "0", {}, {}}},
{"2", {"1", "4", "5", "6", "3", ".", "0", {}}},
{"3", {"2", "5", "6", {}, {}, {}, ".", "0"}},
{"4", {{}, {}, "7", "8", "5", "2", "1", {}}},
{"5", {"4", "7", "8", "9", "6", "3", "2", "1"}},
{"6", {"5", "8", "9", "+", {}, {}, "3", "2"}},
{"7", {{}, {}, {}, "/", "8", "5", "4", {}}},
{"8", {"7", {}, "/", "*", "9", "6", "5", "4"}},
{"9", {"8", "/", "*", "-", "+", {}, "6", "5"}},
}},
{GraphTag::MAC_KEYPAD, {
{"*", {"/", {}, {}, {}, {}, {}, "-", "9"}},
{"+", {"6", "9", "-", {}, {}, {}, {}, "3"}},
{"-", {"9", "/", "*", {}, {}, {}, "+", "6"}},
{".", {"0", "2", "3", {}, {}, {}, {}, {}}},
{"/", {"=", {}, {}, {}, "*", "-", "9", "8"}},
{"0", {{}, "1", "2", "3", ".", {}, {}, {}}},
{"1", {{}, {}, "4", "5", "2", "0", {}, {}}},
{"2", {"1", "4", "5", "6", "3", ".", "0", {}}},
{"3", {"2", "5", "6", "+", {}, {}, ".", "0"}},
{"4", {{}, {}, "7", "8", "5", "2", "1", {}}},
{"5", {"4", "7", "8", "9", "6", "3", "2", "1"}},
{"6", {"5", "8", "9", "-", "+", {}, "3", "2"}},
{"7", {{}, {}, {}, "=", "8", "5", "4", {}}},
{"8", {"7", {}, "=", "/", "9", "6", "5", "4"}},
{"9", {"8", "=", "/", "*", "-", "+", "6", "5"}},
{"=", {{}, {}, {}, {}, "/", "9", "8", "7"}},
}},
});
return *graphs;
}
}