Solución

@aventuradev·2/6/2026TypeScript
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
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.