RPCFN: Average Arrival Time For A Flight (#2)

ベタ書きしてしまいました。テストありません。例外処理してません。すいません。

MIN = 60
HOUR = MIN*60

def average_time_of_day(args)
  times = []
  r = /(\d+?):(\d+?)(am|pm)/

  args.each do |e| 
    times << r.match(e).to_a[1..-1]
  end 
  
  mixed = !(times.all?{|h,m,meridiam| meridiam =~ /am/} || times.all?{|h,m,meridiam| meridiam =~ /pm/})

  full = mixed ? HOUR*24 : 0 

  total = times.map do |h,m,meridiam|
    (meridiam =~ /am/ ? (h =~/12/ ? 0 + m.to_i*MIN : h.to_i*HOUR + m.to_i*MIN) : ((h.to_i*HOUR+HOUR*12 + m.to_i*MIN) - full))  
  end.inject(0) do |sum,t|
    sum + t   
  end   

  average = total/args.size  
  return "#{average/HOUR == 0 ? 12 : average/HOUR}:"+"%02d" % "#{(average % HOUR)/MIN}" +(average <= HOUR*12 ? "am":"pm")
end


サンプルの動作確認しかしてません。すいません。

>> load 'average_time_of_day.rb'
./average_time_of_day.rb:1: warning: already initialized constant MIN
./average_time_of_day.rb:2: warning: already initialized constant HOUR
>> average_time_of_day(["11:51pm", "11:56pm", "12:01am", "12:06am", "12:11am"])
=> "12:01am"
>> average_time_of_day(["6:41am", "6:51am", "7:01am"])
=> "6:51am"

Hint

* Your digital ways will not help you, time of day is cyclical.
* You may need to use the Math and Time classes.

RPCFN: Average Arrival Time For A Flight (#2)

MathとTimeまったく使ってません。すいません。
いい使い方が分からなかった。使う方がめんどくさそうだった!!(逆切れ)
華麗な解法がみたいです。