Solución
solution.tsTypeScript
interface GradeResult {
average: number;
grade: string;
passed: boolean;
bonus: number;
}
const GRADE_A_THERESHOLD = 90
const GRADE_B_THERESHOLD = 80
const GRADE_C_THERESHOLD = 70
const GRADE_D_THERESHOLD = 60
const PASSING_SCORE = 60
const BONUS1 = 10
const BONUS2 = 5
const SHIFT_DECIMAL = 10
function sum(a: number, b: number): number {
return a + b;
}
function round1(n: number) {
return Math.round(n * SHIFT_DECIMAL) / SHIFT_DECIMAL;
}
function getGrade(average: number): string {
if (average >= GRADE_A_THERESHOLD)
return "A";
if (average >= GRADE_B_THERESHOLD)
return "B";
if (average >= GRADE_C_THERESHOLD)
return "C";
if (average >= GRADE_D_THERESHOLD)
return "D";
return "F";
}
function getBonus(average: number, subject: string) {
if (subject === "math" && average >= GRADE_A_THERESHOLD)
return BONUS1;
if (subject === "science" && average >= GRADE_B_THERESHOLD)
return BONUS2;
return 0;
}
export function processStudentGrades(grades: number[], subject: string): GradeResult {
let totalScore = grades.reduce(sum);
let average = round1(totalScore / grades.length);
let grade = getGrade(average);
let passed = average >= PASSING_SCORE;
let bonus = getBonus(average, subject)
return { average: average, grade: grade, passed: passed, bonus: bonus };
}0respuestas