Solución

@alexiis-dev·30/5/2026TypeScript
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
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.