Это однострочник условие:
tokens.select {|t| t if template.include?(t)}.reverse.uniq == template.reverse \
or \
tokens.select {|t| t if template.include?(t)}.uniq == template
Пример:
def check_order(tokens, template)
tokens.select {|t| t if template.include?(t)}.reverse.uniq == template.reverse \
or \
tokens.select {|t| t if template.include?(t)}.uniq == template
end
tokens = ["aaa", "xxx", "bbb", "ccc", "yyy", "zzz"]
template = ["bbb", "aaa", "ccc"]
check_order(tokens,template) # => false
tokens = ["aaa", "ccc", "xxx", "bbb", "ccc", "yyy", "zzz"]
template = ["aaa", "bbb", "ccc"]
check_order(tokens,template) # => true
tokens = ["aaa", "ccc", "xxx", "bbb", "ccc", "yyy", "zzz"]
template = ["aaa", "ccc", "bbb"]
check_order(tokens,template) # => true