google-sheets-util/berkeley-classes-sheet/Code.js

50 lines
1.0 KiB
JavaScript
Raw Normal View History

2022-10-10 11:41:10 -07:00
// NOTE: SHEET IS UNDER BERKELEY ACC
/**
* Calculate GPA given grades & units
* @param {*} grades Grades column
* @param {*} units Class units (weights) column
*/
function GRADEPOINTS(grades, units) {
if (grades.length != units.length) {
throw Error("Grades & Units columns must have the same length")
}
else if (grades[0].length != 1 || units[0].length != 1) {
throw Error("Grades & Units each must be single columns")
}
let gradeMap = {
"A+": 4.0,
"A": 4.0,
"A-": 3.7,
"B+": 3.3,
"B": 3,
"B-": 2.7,
"C+": 2.3,
"C": 2.0,
"C-": 1.7,
"D+": 1.3,
"D": 1,
"D-": 0.7,
"F": 0.0,
}
let gpSum = 0;
let denom = 0;
for (let i = 0; i < grades.length; i++) {
let grade = grades[i][0];
let unitCount = units[i][0]
if (Object.keys(gradeMap).includes(grade)) {
gpSum += gradeMap[grade] * unitCount;
denom += unitCount;
}
}
if (denom == 0) {
throw Error("No valid values found in grades col")
}
return gpSum / denom;
}