Soluzione Ordered (b)
21 Feb 2017
Soluzione Ordered (b)
def ordered(vec)
# Controlliamo l'input
# Potrebbe essere fatto in modo più efficiente, inserendo il secondo
# raise nel for e quindi attraversando l'Array una volta sola per
# eseguire tutte le operazioni
raise ArgumentError, "vec deve essere Array" unless vec.is_a? Array
vec.each do |i|
raise ArgumentError, "vec deve contenere Numeric" unless i.is_a? Numeric
end
# Eseguiamo se il vettore ha più di un elemento
if vec.size >= 2
# Inizializzazione delle condizioni possibili
str_cres, nor_cres, str_decr, nor_decr = true, true, true, true
for i in 1...vec.size
if vec[i] > vec[i-1]
# Non è DECRESCENTE
str_decr = false
nor_decr = false
elsif vec[i] < vec[i-1]
# Non è CRESCENTE
str_cres = false
nor_cres = false
else
# Non è STRETTAMENTE crescente/decrescente
str_decr = false
str_cres = false
end
end
return 2 if str_cres
return -2 if str_decr
return 1 if nor_cres
return -1 if nor_decr
end
# Non è ordinato o ha meno di 2 elementi
return 0
end