You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.1 KiB
58 lines
1.1 KiB
//boyer-moore? |
|
module.exports = function bm(buf,search,offset){ |
|
var m = 0, j = 0 |
|
var table = [] |
|
|
|
var ret = -1; |
|
for(var i=offset||0;i<buf.length;++i){ |
|
console.log('i',i) |
|
|
|
table[i] = [[i,0]] |
|
if(buf[i] === search[0]) { |
|
for(j = search.length-1;j>0;--j){ |
|
table[i].push([i+j,j]) |
|
console.log('j',j) |
|
if(buf[i+j] !== search[j]) { |
|
|
|
//i += j |
|
j = -1 |
|
break |
|
} |
|
} |
|
if(j === 0) { |
|
ret = i |
|
break |
|
} |
|
} |
|
} |
|
|
|
console.log(table) |
|
renderTable(table,buf,search) |
|
return ret |
|
} |
|
|
|
|
|
var chalk = require('chalk') |
|
function renderTable(table,buf,search){ |
|
var s = '' |
|
|
|
console.log('-----') |
|
console.log('search:',search) |
|
console.log('-----') |
|
console.log(buf+'') |
|
|
|
table.forEach(function(a){ |
|
if(!a) return;// console.log('') |
|
a.forEach(function(v){ |
|
if(!v) return; |
|
var pad = '' |
|
while(pad.length < v[0]){ |
|
pad += ' ' |
|
} |
|
if(search[v[1]] === buf[v[0]]) console.log(pad+chalk.green(search[v[1]])) |
|
else console.log(pad+chalk.red(search[v[1]])) |
|
|
|
}) |
|
}) |
|
console.log('-----') |
|
}
|
|
|