-
Notifications
You must be signed in to change notification settings - Fork 31
/
Copy pathsolution.js
1 lines (1 loc) · 991 Bytes
/
solution.js
1
function hashCodeFactory(n){return void 0===n&&(n=13),function(t){var o=n;for(i=0;i<t.length;i++)o=33*o^t.charCodeAt(i);return o>>>0}}function isBadWord(n){return n.length<options.minWordLength||n.length>options.maxWordLength}var options={mainFilterSize:51200,mainPrefixLength:7,ngramFilterSize:20480,ngramFilterCount:7,ngramLength:3,ngramStep:2,minWordLength:4,maxWordLength:20},modelData,hashFunction=hashCodeFactory();module.exports.init=function(n){modelData=n},module.exports.test=function(n){if(isBadWord(n))return!1;var t=(hashFunction(n.substr(0,options.mainPrefixLength))>>>0)%(8*options.mainFilterSize);if(!(modelData[Math.floor(t/8)]&1<<t%8))return!1;for(var o=0,r=0;o<n.length-options.ngramLength&&r<options.ngramFilterCount;o+=options.ngramStep,++r){var i=n.substr(o,options.ngramLength);if(i.length<1)break;if(base=options.mainFilterSize+r*options.ngramFilterSize,t=(hashFunction(i)>>>0)%(8*options.ngramFilterSize),!(modelData[base+Math.floor(t/8)]&1<<t%8))return!1}return!0};