Soluzione Pairs

21 Feb 2017

Soluzione Pairs

# Scelgo una strategia che non è decisamente la più
# efficiente ma la più facile da implementare.
def pairs(a)
  # Controlliamo l'input per essere un Array
  raise ArgumentError, "Deve essere un Array" unless a.is_a? Array

  # Un Array che contiene tutti gli elementi ripetuti
  repet = []
  # Un Array temporaneo per la raccolata degli elementi
  tmp = [a[0]]
  # Andiamo a raccogliere tutte le serie uguali in repet
  for i in 1...a.size
    if a[i] == tmp[-1]
      tmp << a[i]
    else
      # L'array viene salvato solo se non ha dimensione 1
      repet << tmp.dup unless tmp.size == 1
      # e tmp viene inizializzato di nuovo
      tmp = [a[i]]
    end
  end

  # Ora costruiamo il vettore dei risultati
  ret = {}
  for i in 0...repet.size
    # nuovo elemento dela chiave come Array vuoto se non
    # esiste già
    ret[repet[i].size] = [] unless ret[repet[i].size]
    # Appendiamo un nuovo elemento all'Array di quella
    # chiave, come ultimo elemento per mantenere l'ordine
    ret[repet[i].size] << repet[i][0]
  end

  # Ritorniamo il risultato
  return ret
end