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