characters = [ [ [ [ [ [None, None, None, None], #00000 ["\u2423", "\u002e", "\u003c", "\u0031"], #00001 [SPACE, FULLSTOP, LESS THAN, 1] ], [ ["\u21b9", "\u002c", None, "\u0032"], #00010 [TAB, COMMA, None, 2] ["\u0065", "\u0045", "\u003d", "\u0035"], #00011 [e, E, EQUALS, 5] ], ], [ [ ["\u232b", "\u003a", None, "\u0033"], #00100 [BACKSPACE, :, None, 3] ["\u0061", "\u0041", "\u002b", "\u0036"], #00101 [a, A, PLUS, 6] ], [ ["\u0072", "\u0052", "\u002f", "\u1f50e"], #00110 [r, R, SLASH, CTRL+F] ["\u0075", "\u0055", "\u0027", "\u0038"], #00111 [u, U, APOSTROPHE, 8] ], ], ], [ [ [ ["\u238b", "\u003b", None, "\u0034"], #01000 [ESCAPE, SEMICOLON, None, 4] ["\u0069", "\u0049", "\u002a", "\u0037"], #01001 [i, I, ASTERISK, 7] ], [ ["\u0063", "\u0043", "\u005c", "\u261d"], #01010 [c, C, BACKSLASH, CTRL+A] ["\u0078", "\u0058", "\u0022", "\u0039"], #01011 [x, X, DOUBLE QUOTES, 9] ], ], [ [ ["\u006c", "\u004c", "\u007e", "\u2190\u2318"], #01100 [l, L, TILDE, SUPER LEFT] ["\u007a", "\u005a", "\u003e", "\u2192\u2318"], #01101 [z, Z, GREATER THAN, SUPER RIGHT] ], [ ["\u0064", "\u0044", "\u0060", "\u29c8"], #01110 [d, D, TICK, PASTE] ["\u0068", "\u0048", "\u0040", "\u0030"], #01111 [h, H, AT, 0] ], ], ], ], [ [ [ [ ["\u23ce", "\u21e7\u23ce", "\u002d", "\u2399"], #10000 [RETURN, SHIFT RETURN, MINUS, PRINT SCREEN] ["\u006f", "\u004f", "\u0029", "\u2193"], #10001 [o, O, CLOSE BRACKET, DOWN] ], [ ["\u006d", "\u004d", "\u0028", "\u2192"], #10010 [m, M, OPEN BRACKET, RIGHT] ["\u0070", "\u0050", "\u005f", None], #10011 [p, P, UNDERSCORE, None] ], ], [ [ ["\u0066", "\u0046", "\u0023", "\u2191"], #10100 [f, F, HASH, UP] ["\u0077", "\u0057", "\u007c", None], #10101 [w, W, PIPE, None] ], [ ["\u006a", "\u004a", "\u0025", None], #10110 [j, J, PERCENT, None] ["\u0071", "\u0051", "\u003f", None], #10111 [q, Q, QUESTION MARK, None] ], ], ], [ [ [ ["\u0079", "\u0059", "\u0024", "\u2318"], #11000 [y, Y, DOLLAR, LEFT] ["\u0062", "\u0042", "\u007d", None], #11001 [b, B, CLOSE CURLY BRACKET, None] ], [ ["\u006b", "\u004b", "\u007b", None], #11010 [k, K, OPEN CURLY BRACKET, None] ["\u0067", "\u0047", "\u0021", None], #11011 [g, G, EXCLAMATION MARK, None] ], ], [ [ ["\u0073", "\u0053", "\u005e", "\u21e4"], #11100 [s, S, CIRCUMFLEX, HOME] ["\u0076", "\u0056", "\u005d", "\u21e5"], #11101 [v, V, CLOSE SQUARE BRACKET, END] ], [ ["\u006e", "\u004e", "\u005b", "\u29c9"], #11110 [n, N, OPEN SQUARE BRACKET, CTRL+C] ["\u0074", "\u0054", "\u0026", "▢"], #11111 [t, T, AMPERSAND, SUPER] ], ], ], ], ] def get_character_set(): return sorted(list(set(sum([list(a) for a in sum(sum(sum(sum(sum(characters, []), []), []), []), []) if a is not None], [])))) missing = ["-", "_"]