Solución
solution.tsTypeScript
interface GradeResult {
average: number;
grade: string;
passed: boolean;
bonus: number;
}
type SubjectOfStudy = "math" | "science";
const LIMIT_GRADE_A = 90;
const LIMIT_GRADE_B = 80;
const LIMIT_GRADE_C = 70;
const LIMIT_GRADE_D = 60;
const HIGHEST_BONUS = 10;
const STANDARD_BONUS = 5;
const ROUNDING_FACTOR = 10;
function getSumAllNotes (average: number[]): number {
let sumOfNotes = 0;
// Sumar todos los puntajes del estudiante
for (let index = 0; index < average.length; index++) {
sumOfNotes = sumOfNotes + average[index];
}
return sumOfNotes;
};
const getStudentGrade = (averageGrade: number): string => {
// Determinar la letra de calificación según el promedio
let studientGrade = '';
//
if (averageGrade >= LIMIT_GRADE_A) {
studientGrade = 'A';
//
} else if (averageGrade >= LIMIT_GRADE_B) {
studientGrade = 'B';
//
} else if (averageGrade >= LIMIT_GRADE_C) {
studientGrade = 'C';
//
} else if (averageGrade >= LIMIT_GRADE_D) {
studientGrade = 'D';
//
} else {
studientGrade = 'F';
}
return studientGrade;
};
const getStudentBonus = (subject: SubjectOfStudy, average: number) => {
// Calcular bono según la materia y el promedio
let studientBonus = 0;
//
if (subject === 'math' && average >= LIMIT_GRADE_A) {
studientBonus = HIGHEST_BONUS;
//
} else if (subject === 'science' && average >= LIMIT_GRADE_B) {
studientBonus = STANDARD_BONUS;
}
return studientBonus;
};
export function processStudentGrades(
average: number[],
bonus: SubjectOfStudy,
): GradeResult {
// Sumar todos los puntajes del estudiante
const sumOfNotes = getSumAllNotes(average);
// Calcular el promedio redondeado a un decimal
const averageRounded = Math.round( (sumOfNotes / average.length) * ROUNDING_FACTOR) / ROUNDING_FACTOR;
// Determinar la letra de calificación según el promedio
const studientGrade = getStudentGrade(averageRounded);
// Verificar si el estudiante aprobó
const hasPassed = averageRounded >= LIMIT_GRADE_D;
// Calcular bono según la materia y el promedio
const studientBonus = getStudentBonus(bonus, averageRounded);
return {
average: averageRounded,
grade: studientGrade,
passed: hasPassed,
bonus: studientBonus,
};
}
0respuestas