Versie 0.2.0
This commit is contained in:
commit
e77d8fd373
495 files changed
+81026
No files matched your search
@@ -0,0 +1,90 @@
|
||||
// Generated, do not edit. sha256:74e4ed13a040cfe4e2dc4c23217c88607a06c14c8cc97aceaf7026b8d073ba91
|
||||
import { CONFIG } from '../../shared/config.js';
|
||||
|
||||
const LADDERS = CONFIG.AI.BUCKET_LADDERS;
|
||||
|
||||
function bodemVan(ladderNaam) {
|
||||
const min = CONFIG.AI.BUCKET_MIN_VALUES[ladderNaam] || 0;
|
||||
if (!min) return 0;
|
||||
const ladder = LADDERS[ladderNaam];
|
||||
let smalst = Infinity;
|
||||
for (let i = 0; i < ladder.length; i++) {
|
||||
const onder = ladder[i];
|
||||
const boven = i + 1 < ladder.length ? ladder[i + 1] : 10;
|
||||
smalst = Math.min(smalst, (boven - onder) / onder);
|
||||
}
|
||||
return min / smalst;
|
||||
}
|
||||
|
||||
export function bucket(waarde, ladderNaam = 'COARSE') {
|
||||
const ladder = LADDERS[ladderNaam];
|
||||
if (!ladder) throw new Error(`unknown ladder: ${ladderNaam}`);
|
||||
if (typeof waarde !== 'number' || !Number.isFinite(waarde)) return null;
|
||||
|
||||
if (waarde === 0) return { from: 0, to: 0, exact: true };
|
||||
|
||||
const negatief = waarde < 0;
|
||||
const abs = Math.abs(waarde);
|
||||
|
||||
const bodem = Number.isInteger(waarde) ? bodemVan(ladderNaam) : 0;
|
||||
if (bodem && abs < bodem) {
|
||||
return negatief
|
||||
? { from: -bodem, to: 0, exact: false, floor: true }
|
||||
: { from: 0, to: bodem, exact: false, floor: true };
|
||||
}
|
||||
|
||||
const orde = Math.floor(Math.log10(abs));
|
||||
const schaal = 10 ** orde;
|
||||
const genormaliseerd = Math.min(Math.max(abs / schaal, 1), 9.999999999);
|
||||
|
||||
let onder = ladder[0];
|
||||
let boven = 10;
|
||||
for (let i = 0; i < ladder.length; i++) {
|
||||
if (genormaliseerd >= ladder[i]) {
|
||||
onder = ladder[i];
|
||||
boven = i + 1 < ladder.length ? ladder[i + 1] : 10;
|
||||
}
|
||||
}
|
||||
|
||||
const van = onder * schaal;
|
||||
const tot = boven * schaal;
|
||||
return negatief ? { from: -tot, to: -van, exact: false } : { from: van, to: tot, exact: false };
|
||||
}
|
||||
|
||||
export function bucketLabel(waarde, ladderNaam = 'COARSE') {
|
||||
const b = bucket(waarde, ladderNaam);
|
||||
if (!b) return null;
|
||||
if (b.exact) return String(b.from);
|
||||
if (b.floor) return b.to === 0 ? `meer dan ${getal(b.from)}` : `minder dan ${getal(b.to)}`;
|
||||
return `${getal(b.from)} tot ${getal(b.to)}`;
|
||||
}
|
||||
|
||||
function getal(n) {
|
||||
return Number.isInteger(n) ? String(n) : String(Math.round(n * 100) / 100);
|
||||
}
|
||||
|
||||
export function shareBucket(pct) {
|
||||
const grenzen = CONFIG.AI.SHARE_BUCKETS;
|
||||
if (typeof pct !== 'number' || !Number.isFinite(pct) || pct < 0) return null;
|
||||
if (pct === 0) return { from: 0, to: 0, below: false };
|
||||
if (pct < grenzen[0]) return { from: 0, to: grenzen[0], below: true };
|
||||
|
||||
let onder = grenzen[0];
|
||||
let boven = grenzen[grenzen.length - 1];
|
||||
for (let i = 0; i < grenzen.length; i++) {
|
||||
if (pct >= grenzen[i]) {
|
||||
onder = grenzen[i];
|
||||
boven = i + 1 < grenzen.length ? grenzen[i + 1] : grenzen[i];
|
||||
}
|
||||
}
|
||||
if (onder === boven) return { from: 100, to: 100, below: false };
|
||||
return { from: onder, to: boven, below: false };
|
||||
}
|
||||
|
||||
export function shareLabel(pct) {
|
||||
const b = shareBucket(pct);
|
||||
if (!b) return null;
|
||||
if (b.from === b.to) return `${b.from}%`;
|
||||
if (b.below) return `minder dan ${b.to}%`;
|
||||
return `${b.from} tot ${b.to}%`;
|
||||
}
|
||||
Reference in new issue
Block a user