Soluzione Sequenze

21 Feb 2017

Soluzione Sequence

def sequence(v)
  # Controlliamo l'ingresso (anche se in modo non efficiente)
  raise ArgumentError, "v deve essere Array" unless v.is_a? Array
  v.each do |z|
    raise ArgumentError, "v deve contenere Numeric" unless z.is_a? Numeric
  end

  r = []
  a, b = 0, 0

  # Cerchiamo le seuquenze come indicato, ma usando questo
  # metodo, che risulta il più semplice, ci ritroviamo con
  # elementi che hanno :begin e :end uguali. Aggiungiamo
  # quindi una condizione che ci permette di evitare questo problema
  for i in 1...v.size
    if (v[i] - v[b]).abs < 2
      b = i
    else
      r << { :begin => a, :end => b } if (b - a >= 2)
      a, b = i, i
    end
  end

  # Ritorniamo il risultato
  return r
end