Guest User

Untitled

a guest
Sep 25th, 2013
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 0.83 KB | None | 0 0
  1. class Density
  2.   include Enumerable
  3.   extend Forwardable
  4.  
  5.   attr_accessor :uniform, :fail
  6.   def_delegators :@d, :each, :[], :[]=, :inspect, :delete
  7.  
  8.   def initialize(num=0)
  9.     @d=Hash.new(Rational(0))
  10.     @d[num]=Rational(1)
  11.     @uniform=true
  12.     @fail=false
  13.   end
  14.  
  15.   # addition of INDEPENDENT densities
  16.   def +(y)
  17.     z=Density.new
  18.     z.delete(0)
  19.     z.uniform=@d.uniform
  20.     z.fail=@d.fail
  21.  
  22.     if (y.is_a?Density)
  23.       if (y.fail)
  24.         z.fail=true
  25.       end
  26.       if (y.to_a.size>1 and x.to_a.size>1)
  27.         z.uniform=false
  28.       end
  29.       @d.each do |xkey,xvalue|
  30.         y.each do |ykey,yvalue|
  31.           z[xkey+ykey]+=xvalue*yvalue
  32.         end
  33.       end
  34.     elsif (y.is_a?Numeric)
  35.       @d.each do |xkey,xvalue|
  36.         z[xkey+y]+=xvalue
  37.       end
  38.     else
  39.       #TODO
  40.     end
  41.     return z
  42.   end
Advertisement
Add Comment
Please, Sign In to add comment