From 9a7853bd0583560df666f661c182193674c3a4fd Mon Sep 17 00:00:00 2001 From: Tiago Ribeiro Date: Mon, 5 Jun 2023 14:04:58 +0100 Subject: [PATCH] Created a score calculator --- src/utils/score.ts | 61 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 src/utils/score.ts diff --git a/src/utils/score.ts b/src/utils/score.ts new file mode 100644 index 00000000..66c1e07d --- /dev/null +++ b/src/utils/score.ts @@ -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; +};