Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Created by KoMeDiAnT on 4/12/2017.
- */
- function printHelp() {
- WSH.echo('usage: CScript //nologo WSHHash.js input_file.txt \
- \n//nologo: Prevent logo display: No banner will be shown at execution time \
- \ninput_file: name of input file')
- }
- //@return {number}
- function SimpleHash(str) {
- var hash = 0;
- for (var i = 0; i < str.length; i++){
- hash += str.charCodeAt(i);
- }
- return hash;
- }
- //@return {number}
- function SquareHash(str) {
- var hash = 0;
- for (var i = 0; i < str.length; i++){
- hash += str.charCodeAt(i)*str.charCodeAt(i);
- }
- return hash;
- }
- function FindBySimpleHash(str, subStr) {
- var collision = 0;
- var strHash = 0;
- var subStrHash = SimpleHash(subStr);
- for (var i = 0; i < str.length - subStr.length + 1; i++){
- if(i === 0){
- strHash = SimpleHash(str.substr(0, subStr.length));
- }
- else{
- strHash += str.charCodeAt(i + subStr.length - 1) - str.charCodeAt(i - 1);
- }
- if (strHash === subStrHash){
- var j = 0;
- while(str.charAt(i + j) === subStr.charAt(j)){
- j++;
- if (j === subStr.length){
- var end = i + j - 1;
- WSH.echo('Begin: ' + i + ' End: ' + end);
- collision -= 1;
- break;
- }
- }
- collision++;
- }
- }
- WSH.echo('Amount of collisions: ' + collision);
- }
- function FindBySquareHash(str, subStr) {
- var collision = 0;
- var strHash = 0;
- var subStrHash = SquareHash(subStr);
- for (var i = 0; i < str.length - subStr.length + 1; i++){
- if (i === 0){
- strHash = SquareHash(str.substr(0, subStr.length));
- }
- else{
- strHash += str.charCodeAt(i + subStr.length - 1)*str.charCodeAt(i + subStr.length - 1)
- - str.charCodeAt(i - 1)*str.charCodeAt(i - 1);
- }
- if (strHash === subStrHash){
- var j = 0;
- while(str.charAt(i + j) === subStr.charAt(j)){
- j++;
- if (j === subStr.length){
- var end = i + j - 1;
- WSH.echo('Begin: ' + i + ' End: ' + end);
- collision--;
- break;
- }
- }
- collision++;
- }
- }
- WSH.echo('Amount of collisions: ' + collision);
- }
- function FindByRAndCHash(str, subStr) {
- var collision = 0;
- var strHash = 0;
- var subStrHash = 0;
- for (var i = 0; i < subStr.length; i++){
- strHash += str.charCodeAt(i)*Math.pow(2, subStr.length - i - 1);
- subStrHash += subStr.charCodeAt(i)*Math.pow(2, subStr.length - i - 1);
- }
- var i = 0;
- while(i < str.length - subStr.length + 1){
- if (strHash === subStrHash){
- var j = 0;
- while(str.charAt(i + j) === subStr.charAt(j)){
- j++;
- if (j === subStr.length){
- var end = i + j - 1;
- WSH.echo('Begin: ' + i + ' End: ' + end);
- collision--;
- break;
- }
- }
- collision++;
- }
- i++;
- strHash = (strHash - str.charCodeAt(i - 1)*Math.pow(2, subStr.length - 1))*2 + str.charCodeAt(i + subStr.length - 1);
- }
- WSH.echo('Amount of collisions: ' + collision);
- }
- function main() {
- if (WSH.Arguments.length === 0){
- printHelp();
- return;
- }
- var fso = new ActiveXObject('Scripting.FileSystemObject')
- var ts = fso.OpenTextFile(WSH.Arguments(0));
- var inputData = ts.ReadAll();
- // Раскомментируй, если хочешь проверку работы скрипта
- // WSH.echo('Type string, please')
- // var inputData = WScript.StdIn.ReadLine();
- if (inputData === ''){
- WSH.echo('Input file is empty');
- return;
- }
- WSH.echo('Type substring')
- var subStr = WScript.StdIn.ReadLine();
- if (subStr === ''){
- WSH.echo('Wrong input substring');
- return;
- }
- var start;
- var end;
- var time;
- WSH.echo('\nBy Simple Hash:');
- start = new Date().getTime();
- FindBySimpleHash(inputData, subStr);
- end = new Date().getTime();
- time = end - start;
- WSH.echo('Time for Simple Hash: '+ time + '\n');
- WSH.echo('By Square Hash:');
- start = new Date().getTime();
- FindBySquareHash(inputData, subStr);
- end = new Date().getTime();
- time = end - start;
- WSH.echo('Time for Square Hash: ' + time + '\n');
- WSH.echo('By Rabin And Carp Hash:');
- start = new Date().getTime();
- FindByRAndCHash(inputData, subStr);
- end = new Date().getTime();
- time = end - start;
- WSH.echo('Time for Rabin And Carp Hash: ' + time + '\n');
- }
- main();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement