Где хорошая реализация математических наборов для JavaScript? Он должен включать эффективные реализации пересечения, объединения, дополнения и (для бонусных точек) декартова произведения.
Нет, это не домашнее задание. У меня есть юбикей, это USB-клавиатура, которая набирает последовательность, выбранную из 16 кодов клавиш, для ввода 128-битного одноразового пароля (otp). Чтобы сделать его более полезным, программное обеспечение должно обнаружить раскладку клавиатуры на основе созданных символов и сопоставить эти символы с тем, что они будут в макете "us" для совместимости с существующим бэкэнд.
Итак, у меня есть 93 разных последовательности из 16 символов, представляющих все, что юбикеи могут вводить в каждом из 430 раскладок клавиатуры. (Многие макеты одинаковы для этой цели.) Возможные сопоставления для определенного otp - это каждая 16-символьная последовательность, содержащая каждый символ в otp.
Чтобы найти это эффективно, я использую обратный индекс, отображающий каждый возможный символ в список раскладок клавиатуры, которые используют этот символ. Ответ - это пересечение каждой записи обратного индекса для каждого уникального символа в ОТП. Это почти всегда заканчивается ровно одним элементом.
Было бы проще написать этот кросс-браузер с хорошей реализацией Set()
.
Код пока находится в http://dingoskidneys.com/~dholth/yubikey/