Averages/Median: Difference between revisions
Content added Content deleted
m (→{{header|Java}}: stopped the solution from being insanely slow...) |
(add Ruby) |
||
Line 12: | Line 12: | ||
return list.get((list.size()-1)/2); |
return list.get((list.size()-1)/2); |
||
}</lang> |
}</lang> |
||
=={{header|Ruby}}== |
|||
<lang ruby>def median(ary) |
|||
return nil if ary.empty? |
|||
mid, rem = ary.length.divmod(2) |
|||
if rem == 0 |
|||
ary.sort[mid-1,2].inject(:+) / 2.0 |
|||
else |
|||
ary.sort[mid] |
|||
end |
|||
end |
|||
p median([]) # => nil |
|||
p median([5,3,4]) # => 4 |
|||
p median([5,4,2,3]) # => 3.5 |
|||
p median([3,4,1,-8.4,7.2,4,1,1.2]) # => 2.1</lang> |
|||
=={{header|Tcl}}== |
=={{header|Tcl}}== |
Revision as of 14:30, 12 June 2009
Averages/Median
You are encouraged to solve this task according to the task description, using any language you may know.
You are encouraged to solve this task according to the task description, using any language you may know.
Write a program to find the median value of a vector of floating-point numbers. The program need not handle the case where the vector is empty, but must handle the case where there are an even number of elements.
See also
Java
<lang java5>public static double median(List<Double> list){
Collections.sort(list); if(list.size() % 2 == 0){ return (list.get((list.size()) / 2) + list.get((list.size()) / 2 - 1)) / 2; } return list.get((list.size()-1)/2);
}</lang>
Ruby
<lang ruby>def median(ary)
return nil if ary.empty? mid, rem = ary.length.divmod(2) if rem == 0 ary.sort[mid-1,2].inject(:+) / 2.0 else ary.sort[mid] end
end
p median([]) # => nil p median([5,3,4]) # => 4 p median([5,4,2,3]) # => 3.5 p median([3,4,1,-8.4,7.2,4,1,1.2]) # => 2.1</lang>
Tcl
<lang tcl>proc median args {
set list [lsort -real $args] set len [llength $list] # Odd number of elements if {$len & 1} { return [lindex $list [expr {($len-1)/2}]] } # Even number of elements set idx2 [expr {$len/2}] set idx1 [expr {$idx2-1}] return [expr { ([lindex $list $idx1] + [lindex $list $idx2])/2.0 }]
}
puts [median 3.0 4.0 1.0 -8.4 7.2 4.0 1.0 1.2]; # --> 2.1</lang>