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
|