29 lines
533 B
Ruby
29 lines
533 B
Ruby
class MovingAverager
|
|
def initialize(size)
|
|
@size = size
|
|
@nums = []
|
|
@sum = 0.0
|
|
end
|
|
def <<(hello)
|
|
@nums << hello
|
|
goodbye = @nums.length > @size ? @nums.shift : 0
|
|
@sum += hello - goodbye
|
|
self
|
|
end
|
|
def average
|
|
@sum / @nums.length
|
|
end
|
|
alias to_f average
|
|
def to_s
|
|
average.to_s
|
|
end
|
|
end
|
|
|
|
ma3 = MovingAverager.new(3)
|
|
ma5 = MovingAverager.new(5)
|
|
|
|
(1.upto(5).to_a + 5.downto(1).to_a).each do |num|
|
|
printf "Next number = %d, SMA_3 = %.3f, SMA_5 = %.1f\n",
|
|
num, ma3 << num, ma5 <<num
|
|
end
|