diff options
author | Brian Picciano <mediocregopher@gmail.com> | 2022-09-13 12:56:08 +0200 |
---|---|---|
committer | Brian Picciano <mediocregopher@gmail.com> | 2022-09-13 12:56:08 +0200 |
commit | 4f01edb9230f58ff84b0dd892c931ec8ac9aad55 (patch) | |
tree | 9c1598a3f98203913ac2548883c02a81deb33dc7 /src/http/static/trading-in-the-rain/Distributor.js | |
parent | 5485984e05aebde22819adebfbd5ad51475a6c21 (diff) |
move src out of srv, clean up default.nix and Makefile
Diffstat (limited to 'src/http/static/trading-in-the-rain/Distributor.js')
-rw-r--r-- | src/http/static/trading-in-the-rain/Distributor.js | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/http/static/trading-in-the-rain/Distributor.js b/src/http/static/trading-in-the-rain/Distributor.js new file mode 100644 index 0000000..fa6e9f2 --- /dev/null +++ b/src/http/static/trading-in-the-rain/Distributor.js @@ -0,0 +1,42 @@ +function distribute(val, minOld, maxOld, minNew, maxNew) { + let scalar = (val - minOld) / (maxOld - minOld); + return minNew + ((maxNew - minNew) * scalar); +} + +function Distributor(capacity) { + this.cap = capacity; + + this.reset = () => { + this.arr = []; + this.arrSorted = []; + this.length = 0; + }; + this.reset(); + + // add adds the given value into the series, shifting off the oldest value if + // the series is at capacity. + this.add = (val) => { + this.arr.push(val); + if (this.arr.length >= this.cap) this.arr.shift(); + this.arrSorted = this.arr.slice(); // copy array + this.arrSorted.sort(); + this.length = this.arr.length; + }; + + // distribute finds where the given value falls within the series, and then + // scales that into the given range (inclusive). + this.distribute = (val, min, max) => { + if (this.length == 0) throw "cannot locate within empty Distributor"; + + let idx = this.length; + for (i in this.arrSorted) { + if (val < this.arrSorted[i]) { + idx = i; + break; + } + } + + return distribute(idx, 0, this.length, min, max); + }; +} + |