Created a score calculator
This commit is contained in:
61
src/utils/score.ts
Normal file
61
src/utils/score.ts
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
type Type = "academic" | "general";
|
||||||
|
|
||||||
|
const readingGeneralMarking: {[key: number]: number} = {
|
||||||
|
100: 9,
|
||||||
|
97.5: 8.5,
|
||||||
|
92.5: 8,
|
||||||
|
90: 7.5,
|
||||||
|
85: 7,
|
||||||
|
80: 6.5,
|
||||||
|
75: 6,
|
||||||
|
67.5: 5.5,
|
||||||
|
57.5: 5,
|
||||||
|
45.5: 4.5,
|
||||||
|
37.5: 4,
|
||||||
|
30: 3.5,
|
||||||
|
22.5: 3,
|
||||||
|
15: 2.5,
|
||||||
|
};
|
||||||
|
|
||||||
|
const academicMarking: {[key: number]: number} = {
|
||||||
|
97.5: 9,
|
||||||
|
92.5: 8.5,
|
||||||
|
87.5: 8,
|
||||||
|
80: 7.5,
|
||||||
|
75: 7,
|
||||||
|
65: 6.5,
|
||||||
|
57.5: 6,
|
||||||
|
45: 5.5,
|
||||||
|
40: 5,
|
||||||
|
32.5: 4.5,
|
||||||
|
25: 4,
|
||||||
|
20: 3.5,
|
||||||
|
15: 3,
|
||||||
|
10: 2.5,
|
||||||
|
};
|
||||||
|
|
||||||
|
const moduleMarkings: {[key in "reading" | "listening"]: {[key in Type]: {[key: number]: number}}} = {
|
||||||
|
reading: {
|
||||||
|
academic: academicMarking,
|
||||||
|
general: readingGeneralMarking,
|
||||||
|
},
|
||||||
|
listening: {
|
||||||
|
academic: academicMarking,
|
||||||
|
general: academicMarking,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export const calculateBandScore = (correct: number, total: number, module: "reading" | "listening", type: Type) => {
|
||||||
|
const marking = moduleMarkings[module][type];
|
||||||
|
const percentage = (correct * 100) / total;
|
||||||
|
|
||||||
|
for (const value of Object.keys(marking)
|
||||||
|
.map((x) => parseFloat(x))
|
||||||
|
.sort((a, b) => b - a)) {
|
||||||
|
if (percentage >= value) {
|
||||||
|
return marking[value];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user