ulvis.paste.net

Paste Search Dynamic
Recent pastes
getPatternPos
  1. function getPatternPos(array, pattern) {
  2.     const result = [];
  3.    
  4.     function patternCode(i) {
  5.         return pattern[i].charCodeAt(0);
  6.     }
  7.    
  8.     function createStateMachine(pattern) {
  9.         // zero initialize matrix
  10.         const sm = Array.apply(null, Array(256 * pattern.length)).map(Number.prototype.valueOf, 0);
  11.         let s = 0;
  12.         sm[patternCode(0) * pattern.length + 0] = 1;
  13.        
  14.         for (let i = 1; i < pattern.length; ++i) {
  15.                 print('---------');
  16.                 sm[patternCode(s) * pattern.length + i] = s + 1;
  17.                 print(patternCode(s), i, " = ", s + 1);
  18.                 sm[patternCode(i) * pattern.length + i] = i + 1;
  19.                 print(patternCode(i) , i, " = ", i + 1);
  20.                 s = sm[patternCode(i) * pattern.length + s];
  21.                 print(s)
  22.                 print('^^^^^^^^^');
  23.         }
  24.        
  25.         return sm;
  26.     }
  27.    
  28.     const sm = createStateMachine(pattern);
  29.     // numStates = pattern.length;
  30.     // let s = 0;
  31.     // for (let i = 0; i < array.length; ++i) {
  32.     //  s = sm[array[i].charCodeAt(0) * numStates + s];
  33.     //  if (s === pattern.length) {
  34.     //          result.push(i);
  35.     //          s = 0;
  36.     //  }
  37.     // }
  38.    
  39.     return sm;
  40. }
  41.  
  42. const pat = "a b a b c".split(" ");
  43. const sm = getPatternPos(['i', 't', 't', 'i', 'i', 't', 't', 't'], pat);
  44.  
  45. print('a'.charCodeAt(0))
  46. print('b'.charCodeAt(0))
  47. print('c'.charCodeAt(0))
  48.  
  49. for (let i = 0; i < 256; ++i) {
  50.         for (let j = 0; j < pat.length; ++j) {
  51.                 if (sm[i * pat.length + j]) {
  52.                         print("[" + i + ", " + j + "] = " + sm[i * pat.length + j]);
  53.                 }
  54.         }
  55. }
  56.  
  57.  
  58. //print(getPatternPos(['i', 't', 't', 'i', 'i', 't', 't', 't'], ['i', 't', 't']));
  59. // [2, 6]
  60.  
  61. //print(getPatternPos(['i','t','i', 't', 't', 'i', 'i', 't', 't', 't'], ['i', 't', 't']));
  62. // [4, 8]
  63.  
  64. //print(getPatternPos(['a', 'b', 'a', 'b', 'b', 'a', 'b', 'c', 'd'], ['a', 'b', 'c']));
  65. // [7]
Parsed in 0.010 seconds