Solución
solution.tsTypeScript
interface GradeResult {
average: number;
grade: string;
passed: boolean;
bonus: number;
}
const GRADE_A_MIN_SCORE = 90;
const GRADE_B_MIN_SCORE = 80;
const GRADE_C_MIN_SCORE = 70;
const GRADE_D_MIN_SCORE = 60;
const gradesValue = {
A: 'A',
B: 'B',
C: 'C',
D: 'D',
F: 'F',
};
const gradesCalification = {
A: GRADE_A_MIN_SCORE,
B: GRADE_B_MIN_SCORE,
C: GRADE_C_MIN_SCORE,
D: GRADE_D_MIN_SCORE,
};
export function processStudentGrades(a: number[], b: string): GradeResult {
const GRADES = a;
const SUBJECT = b;
let gradesSum = 0;
// Sumar todos los puntajes del estudiante
for (let index = 0; index < GRADES.length; index++) {
gradesSum += GRADES[index];
}
// Calcular el promedio redondeado a 1 decimal
const average = Math.round((gradesSum / GRADES.length) * 10) / 10;
// Determinar la letra de calificación según el promedio
let grade = '';
if (average >= gradesCalification.A) {
grade = gradesValue.A;
} else if (average >= gradesCalification.B) {
grade = gradesValue.B;
} else if (average >= gradesCalification.C) {
grade = gradesValue.C;
} else if (average >= gradesCalification.D) {
grade = gradesValue.D;
} else {
grade = gradesValue.F;
}
// Verificar si el estudiante aprobó
const passed = average >= gradesCalification.D;
const bonus = getBonus(SUBJECT, average);
return { average, grade, passed, bonus };
}
function getBonus(subject: string, average: number): number {
const MATH_SUBJECT = 'math';
const SCIENCE_SUBJECT = 'science';
const MATH_A_CALIFICATION_BONUS = 10;
const SCIENCE_B_CALIFICATION_BONUS = 5;
let bonus = 0;
if (subject === MATH_SUBJECT && average >= gradesCalification.A) {
bonus = MATH_A_CALIFICATION_BONUS;
} else if (
subject === SCIENCE_SUBJECT &&
average >= gradesCalification.B
) {
bonus = SCIENCE_B_CALIFICATION_BONUS;
}
return bonus;
}0respuestas