哪里有一个好的 JavaScript 数学集合实现?它应该包括交集、并集、补集和(奖励点)笛卡尔积的有效实现。
不,这不是家庭作业。我有一个 yubikey,它是一个 USB 键盘,可以输入从 16 个键码中选择的序列来输入 128 位一次性密码 (otp)。为了使其更有用,软件应根据生成的字符检测键盘布局,并将这些字符映射回“us”布局中的内容,以便与现有后端兼容。
因此,我有 93 个不同的 16 个字符序列,代表 yubikey 在 430 种键盘布局中的每一种中可以输入的所有内容。 (为此目的,许多布局都是相同的。)特定 otp 的可能映射是包含 otp 中每个字符的每个 16 个字符序列。
为了有效地找到这一点,我使用反向索引将每个可能的字符映射到使用该字符的键盘布局列表。答案是 otp 中每个唯一字符的反向索引的每个条目的交集。这几乎总是以恰好 1 个元素结束。
通过良好的实现来编写这个跨浏览器会更容易Set()
.
到目前为止的代码位于http://dingoskidneys.com/~dholth/yubikey/ http://dingoskidneys.com/~dholth/yubikey/
通过使用jPaq http://jpaq.org/或另一个实现 Array.prototype.reduce 和 Array.prototype.forEach 函数的 JavaScript 库,您可以创建接受两个或多个数组的笛卡尔积函数。以下是计算两个或多个数组的笛卡尔积的函数的代码:
function cartesianProductOf() {
return Array.prototype.reduce.call(arguments, function(a, b) {
var ret = [];
a.forEach(function(a) {
b.forEach(function(b) {
ret.push(a.concat([b]));
});
});
return ret;
}, [[]]);
}
就其在库中而言,我愿意接受有关函数命名的建议,以便我可以将其添加到jPaq http://jpaq.org/。顺便说一句,为了不抄袭,我确实想到了使用reduce from这个帖子 https://stackoverflow.com/questions/4796678/javascript-golf-cartesian-product/4797658#4797658.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)