Soluzione Massimo Locale
21 Feb 2017
Soluzione Massimo Locale
def local_max(vec)
# Per prima cosa controlliamo che l'input sia un Array
# di tutti numeri interi.
raise ArgumentError, "l'argomento deve essere un Array" unless vec.is_a? Array
vec.each do |i|
raise ArgumentError, "gli elementi dell'Array devono essere Numeric" unless i.is_a? Numeric
end
# Questo controllo poteva essere effettuato anche durante il loop dell'algoritmo per
# aumentarne la efficienza.
# Costruiamo un vettore vuoto nel quale salveremo i nostri indici
# ei massimi locali
mx = []
# I massimi locali possono trovarsi solo tra gli elementi in indice
# 1 e la fine del vettore meno 1 elemento (ovvero non controlliamo
# gli elementi del vettore vec[0] e vec[-1])
for i in 1...(vec.size-1)
# Aggiungiamo l'elemento all'indice se rispetta entrambe le condizioni
mx << i if (vec[i] > vec[i-1] and vec[i] > vec[i+1])
end
# Ritorniamo i vettori di indice
return mx
end