A simple case of array_size mod 4 = 0 :
xs = [5, 8, 4, 38, 8, 6, 9, 7, 7, 3, 1, 6] q = xs.size / 4 ys = xs.sort[q...3*q] mean = ys.inject(0, :+) / ys.size.to_f
General case ( array_size >= 4 ):
xs = [1, 3, 5, 7, 9, 11, 13, 15, 17] q = xs.size / 4.0 ys = xs.sort[q.ceil-1..(3*q).floor] factor = q - (ys.size/2.0 - 1) mean = (ys[1...-1].inject(0, :+) + (ys[0] + ys[-1]) * factor) / (2*q)
However, if you are not trying to encode it yourself, this will not help ...
source share