Class: Elrio::PatternDetector

Inherits:
Object
  • Object
show all
Defined in:
lib/elrio/pattern_detector.rb

Instance Method Summary collapse

Instance Method Details

#detect_pattern(array) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/elrio/pattern_detector.rb', line 3

def detect_pattern(array)
  max_n = array.size / 2
  longest_run = (0..0)
  longest_run_n = 1

  (1..max_n).each do |n|
    max_offset = [n-1, array.size - 2*n].min

    (0..max_offset).each do |offset|
      generator = NGramGenerator.new(array, n, offset)
      run = find_longest_run(generator)

      if run.size > [n, longest_run.size].max
        longest_run = run
        longest_run_n = n
      end
    end
  end

  if longest_run.size == 1
    start_cap = array.size
    end_cap = 0
  else
    start_cap = longest_run.first
    end_cap = array.count - longest_run.last - 1
  end

  Pattern.new(start_cap, end_cap, longest_run_n)
end