function expectedValueByPositionAndPick(picks) {
const gaussianWeights = precomputeGaussianWeights();
const weightedValues = {};
for (const pick of picks) {
const { pos, pick: pickNumber, w_av } = pick;
if (!weightedValues[pos]) {
weightedValues[pos] = {};
}
for (
let comparisonPickNumber = 1;
comparisonPickNumber <= 224;
comparisonPickNumber++
) {
const weight = gaussianWeights[pickNumber][comparisonPickNumber];
if (!weightedValues[pos][comparisonPickNumber]) {
weightedValues[pos][comparisonPickNumber] = {
valueSum: 0,
weightSum: 0
};
}
weightedValues[pos][comparisonPickNumber].valueSum += w_av * weight;
weightedValues[pos][comparisonPickNumber].weightSum += weight;
}
}
const expectedValues = {};
for (const pos in weightedValues) {
expectedValues[pos] = {};
for (const pickNumber in weightedValues[pos]) {
const { valueSum, weightSum } = weightedValues[pos][parseInt(pickNumber)];
expectedValues[pos][parseInt(pickNumber)] = valueSum / weightSum;
}
}
return expectedValues;
}