Solución
solution.tsTypeScript
interface GradeResult {
average: number;
grade: string;
passed: boolean;
bonus: number;
}
const PASSING_SCORE = 60;
const GRADE_A_THRESHOLD = 90;
const GRADE_B_THRESHOLD = 80;
const GRADE_C_THRESHOLD = 70;
const GRADE_D_THRESHOLD = 60;
const MATH_SUBJECT = "math";
const SCIENCE_SUBJECT = "science";
const MATH_BONUS_THRESHOLD = 90;
const SCIENCE_BONUS_THRESHOLD = 80;
const MATH_BONUS_POINTS = 10;
const SCIENCE_BONUS_POINTS = 5;
function calculateAverageScore(scores: number[]): number {
const totalScore = scores.reduce((sum, score) => sum + score, 0);
const rawAverage = totalScore / scores.length;
return Math.round(rawAverage * 10) / 10;
}
function determineLetterGrade(averageScore: number): string {
if (averageScore >= GRADE_A_THRESHOLD) return "A";
if (averageScore >= GRADE_B_THRESHOLD) return "B";
if (averageScore >= GRADE_C_THRESHOLD) return "C";
if (averageScore >= GRADE_D_THRESHOLD) return "D";
return "F";
}
function calculateBonusPoints(subject: string, averageScore: number): number {
if (subject === MATH_SUBJECT && averageScore >= MATH_BONUS_THRESHOLD) {
return MATH_BONUS_POINTS;
}
if (subject === SCIENCE_SUBJECT && averageScore >= SCIENCE_BONUS_THRESHOLD) {
return SCIENCE_BONUS_POINTS;
}
return 0;
}
export function processStudentGrades(a: number[], b: string): GradeResult {
const scores = a;
const subject = b;
const average = calculateAverageScore(scores);
const grade = determineLetterGrade(average);
const passed = average >= PASSING_SCORE;
const bonus = calculateBonusPoints(subject, average);
return {
average,
grade,
passed,
bonus,
};
}
0respuestas