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.
RPCFN: Average Arrival Time For A Flight (#2)
* You may need to use the Math and Time classes.
MathとTimeまったく使ってません。すいません。
いい使い方が分からなかった。使う方がめんどくさそうだった!!(逆切れ)
華麗な解法がみたいです。