Soluzione Somma e Prodotto

21 Feb 2017

Soluzione Somma e Prodotto

def sum_prod(vec)
  # Controlliamo l'input
  raise ArgumentError, "vec deve essere un Array" unless vec.is_a? Array
  vec.each do |z|
    raise ArgumentError, "vec deve contenere Numeric" unless z.is_a? Numeric
  end

  # Due indici: i per scorrere il vettore, z per la chiave hash
  i, z = 0, 0
  # Valore da ritornare
  r = {}

  while i < vec.size
    z += 1 # Incrementiamo l'indice
    r[z] = [
      vec[i] + (vec[i + 1] || 0) + (vec[i + 2] || 0), # Somma
      vec[i] * (vec[i + 1] || 1) * (vec[i + 2] || 1)  # Prodotto
    ]
    i += 3 # incrementiamo il gruppo in vec considerato
  end

  # (vec[i] || 0) ritorna vec[i] se vec[i] != nil. Se è nil ritorna 0.

  return r
end