Soluzione Max Min
21 Feb 2017
Soluzione
def max_min_soluzione(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.
# Inizializziamo l'Hash da ritornare come output
h = { max: vec[0], min: vec[1] }
# Continuiamo a esplorare il resto dell'Array
for i in 2...vec.size
# Cerchiamo il massimo/minimo negli indici pari/dispari
if i % 2 == 0
# assegna un nuovo valore a h[:max] se vec[i] è maggiore di h[:max]
# sfruttando un operatore ternario che si legge come se fosse:
# if h[:max] > vec[i]
# h[:max] = h[:max]
# else
# h[:max] = vec[i]
# end
# oppure
# h[:max] = vec[i] if vec[i] > h[:max]
# Tutti e tre i modi sono corretti.
h[:max] = (h[:max] > vec[i] ? h[:max] : vec[i])
else
h[:min] = (h[:min] < vec[i] ? h[:min] : vec[i])
end
end
return h
end