25
return count.toString();
26
}
28
>
export function rot(index: number, modulo: number): number {
29
return (modulo + (index % modulo)) % modulo;
30
}
32
>
export class Counter {
33
private _next = 0;
35
>
getNext(): number {
36
return this._next++;
37
}
39
>
40
>
export class MovingAverage {
41
42
private _n = 1;
43
private _val = 0;
45
>
update(value: number): number {
46
this._val = this._val + (value - this._val) / this._n;
47
this._n += 1;
48
return this._val;
49
}
51
>
get value(): number {
52
return this._val;
53
}
55
>
56
>
export class SlidingWindowAverage {
57
>
58
>
private _n: number = 0;
59
>
private _val = 0;
60
>
61
>
private readonly _values: number[] = [];
62
>
private _index: number = 0;
63
>
private _sum = 0;
64
>
65
>
constructor(size: number) {
66
this._values = new Array(size);
67
this._values.fill(0, 0, size);
68
}
70
>
update(value: number): number {
71
const oldValue = this._values[this._index];
72
this._values[this._index] = value;