Soluzione Monotone
21 Feb 2017
Soluzione Monotone
def monotone(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
# (unless a == b)
for i in 1...v.size
if v[i] >= v[b]
b = i
else
r << { :begin => a, :end => b } unless a == b
a, b = i, i
end
end
# Ritorniamo il risultato
return r
end