Solución

@fernando_her85·13/5/2026TypeScript
solution.tsTypeScript
interface GradeResult {
  average: number;
  grade: string;
  passed: boolean;
  bonus: number;
}

const PASSING_SCORE = 60;

const GRADE_A_THRESHOLD = 90;
const GRADE_B_THRESHOLD = 80;
const GRADE_C_THRESHOLD = 70;
const GRADE_D_THRESHOLD = 60;

const MATH_SUBJECT = "math";
const SCIENCE_SUBJECT = "science";

const MATH_BONUS_THRESHOLD = 90;
const SCIENCE_BONUS_THRESHOLD = 80;

const MATH_BONUS_POINTS = 10;
const SCIENCE_BONUS_POINTS = 5;

function calculateAverageScore(scores: number[]): number {
  const totalScore = scores.reduce((sum, score) => sum + score, 0);
  const rawAverage = totalScore / scores.length;

  return Math.round(rawAverage * 10) / 10;
}

function determineLetterGrade(averageScore: number): string {
  if (averageScore >= GRADE_A_THRESHOLD) return "A";
  if (averageScore >= GRADE_B_THRESHOLD) return "B";
  if (averageScore >= GRADE_C_THRESHOLD) return "C";
  if (averageScore >= GRADE_D_THRESHOLD) return "D";
  return "F";
}

function calculateBonusPoints(subject: string, averageScore: number): number {
  if (subject === MATH_SUBJECT && averageScore >= MATH_BONUS_THRESHOLD) {
    return MATH_BONUS_POINTS;
  }

  if (subject === SCIENCE_SUBJECT && averageScore >= SCIENCE_BONUS_THRESHOLD) {
    return SCIENCE_BONUS_POINTS;
  }

  return 0;
}

export function processStudentGrades(a: number[], b: string): GradeResult {
  const scores = a;
  const subject = b;

  const average = calculateAverageScore(scores);
  const grade = determineLetterGrade(average);
  const passed = average >= PASSING_SCORE;
  const bonus = calculateBonusPoints(subject, average);

  return {
    average,
    grade,
    passed,
    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.