Sha256: fb4a16b40181ec792df5f604a07a664f5f156cb96de4e68537b29dbfe58afc2a
Contents?: true
Size: 873 Bytes
Versions: 1
Compression:
Stored size: 873 Bytes
Contents
module NumberCrusher def Quantile(numbers = nil, quant:) function = Quantile.new(quant: quant) numbers ? function.call(numbers) : function end class Quantile using EnumeratorExtension def initialize(quant:) unless (0.0..1.0).include?(quant) fail %(Expect quant: between 0.0 and 1.0 (inclusive), got "#{quant}") end @quant = quant end def call(numbers) return nil if numbers.empty? sorted = numbers.sort return sorted.first if @quant == 0 return sorted.last if @quant == 1 quantile(sorted) end private def quantile(numbers) quantile_index = numbers.size * @quant index = quantile_index.ceil if quantile_index == quantile_index.to_int (numbers[index - 1] + numbers[index]) / 2.0 else numbers[index - 1] end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
number_crusher-0.1.1 | lib/number_crusher/quantile.rb |