Solución

@estouchedisindo·12/5/2026TypeScript
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
Respuestas

Aún no hay respuestas

¡Sé el primero en responder!

Escribir un comentario

Recuerda ser amable. Estás comentando la solución de otra persona. Comparte tu perspectiva de forma constructiva y respetuosa.

Debes iniciar sesión para publicar un comentario.