prefix sma_
global p[] ind[] sum[] smpl[][] .
func new p .
   p[] &= p
   ind[] &= 0
   sum[] &= 0
   smpl[][] &= [ ]
   return len p[]
.
func get id x .
   ind[id] = (ind[id] + 1) mod1 p[id]
   ind = ind[id]
   if len smpl[id][] < ind
      len smpl[id][] ind
   else
      sum[id] -= smpl[id][ind]
   .
   sum[id] += x
   smpl[id][ind] = x
   return sum[id] / len smpl[id][]
.
prefix
# 
sma5 = sma_new 5
sma3 = sma_new 3
numfmt 2 4
for v in [ 1 2 3 4 5 5 4 3 2 1 ]
   print sma_get sma3 v & "  " & sma_get sma5 v
.
