59 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| //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('-----')
 | |
| }
 |