import {Module} from "@/interfaces"; 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 Module]: {[key in Type]: {[key: number]: number}}} = { reading: { academic: academicMarking, general: readingGeneralMarking, }, listening: { academic: academicMarking, general: academicMarking, }, writing: { academic: academicMarking, general: readingGeneralMarking, }, speaking: { academic: academicMarking, general: academicMarking, }, }; export const calculateBandScore = (correct: number, total: number, module: Module, 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; }; export const calculateAverageLevel = (levels: {[key in Module]: number}) => { return Object.keys(levels).reduce((accumulator, current) => levels[current as Module] + accumulator, 0) / 4; };