Averages/Mean time of day: Difference between revisions

m
→‎{{header|Sidef}}: minor code simplifications
m (→‎{{header|Perl 6}}: added output)
m (→‎{{header|Sidef}}: minor code simplifications)
Line 1,307:
Using the '''mean_angle()''' function from: [http://rosettacode.org/wiki/Averages/Mean_angle#Sidef "Averages/Mean angle"]
<lang ruby>func time2deg(t) {
(var m = t.match(/^(\d\d):(\d\d):(\d\d)$/)) || die "invalid time";
var (hh,mm,ss) = m.cap.map{.to_i}...;
((hh ~~ 024...23range) && (mm ~~ 060...59range) && (ss ~~ 0..60.59range)) || die "invalid time";
(hh*3600 + mm*60 + ss) * 360 / 86400;
}
 
 
func deg2time(d) {
var sec = ((d % 360) * 86400 / 360);
"%02d:%02d:%02d" % (sec/3600, (sec%3600)/60, sec%60);
}
 
func mean_time(times) {
deg2time(mean_angle(times.map {|t| time2deg(t)}));
}
 
say mean_time(["23:00:17", "23:40:20", "00:12:45", "00:17:19"]);</lang>
{{out}}
<pre>23:47:43</pre>
2,747

edits