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 4 2 for v in [ 1 2 3 4 5 5 4 3 2 1 ] print sma_get sma3 v & " " & sma_get sma5 v .