Soluzione To Hour

21 Feb 2017

Soluzione To Hour

# Esistono due modi per risolvere questo esercizio. Il primo
# utilizzando la libreria standard mediante "datetime" e il secondo
# scrivendo direttamente la funzione che si occupa delle conversioni.

#                 1   2   3   4   5   6   7   8   9  10  11  12
Month_days = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

# Dato giorno e mese calcola tutte le ore fino al giorno precedente
# specificato
def date_to_hours(d, m)
  # Non contiamo il giorno corrente, che ne calcoliamo le ore
  days = d - 1
  # Sommatoria di giorni per tutti i mesi precedenti
  for i in 0...m
    days += Month_days[i]
  end
  # Ritorna i giorni moltiplicati per 24
  return days * 24  
end

def to_hour(h,d,m)
  # Per prima cosa controlliamo che siano dati plausibili (ovvero Fixnum)
  [h, d, m].each do |l|
    raise ArgumentError, "Devono essere Fixnum" unless l.is_a? Fixnum  
  end
  # Poi controlliamo il range in cui si trova l'orario (0..23)
  raise ArgumentError, "h in [0..23]" unless (0..23).include? h
  # Controlliamo il range del mese (lo controlliamo prima per
  # usarlo per il numero di giorni in un mese)
  raise ArgumentError, "m in [1..12]" unless (1..12).include? m
  # Controlliamo il numero di giorni in un mese
  raise ArgumentError, "d fuori dal range" unless (1..Month_days[m]).include? d

  # Ritorna tutte le ore
  return date_to_hours(d, m) + h
end