Solución
solution.tsTypeScript
interface GradeResult {
average: number;
grade: string;
passed: boolean;
bonus: number;
}
const A = 90
const B = 80
const C = 70
const D = 60
const MAX_BONUS = 10
const MIN_BONUS = 5
const MATH = 'math'
const SCIENCE = 'science'
function getCalifications(califications: number[]){
return califications.reduce((acc, curr) => acc += curr)
}
function getLetterCalification(average: number){
if(average >= A) return 'A'
if(average >= B) return 'B'
if(average >= C) return 'C'
if(average >= D) return 'D'
return 'F'
}
function getBonus(subject: string, average: number) {
if(subject === MATH && average >= A) return MAX_BONUS
if(subject === SCIENCE && average >= B) return MIN_BONUS
return 0
}
export function processStudentGrades(califications: number[], subject: string): GradeResult {
// Calcular las calificaciones
let studentsCounter: number = getCalifications(califications)
// Calcular el promedio redondeado a 1 decimal
let average: number = +(studentsCounter / califications.length).toFixed(1);
// Determinar la letra de calificación según el promedio
let letterCalification = getLetterCalification(average)
// Verificar si el estudiante aprobó
let isAprove = average >= D;
// Calcular bono según la materia y el promedio
let bonus = getBonus(subject, average);
return { average: average, grade: letterCalification, passed: isAprove, bonus: bonus };
}0respuestas