Skip to content

Instantly share code, notes, and snippets.

@njohnson7
Last active August 13, 2017 09:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save njohnson7/1a3b3e79e9364fa3500be2bfb8b80001 to your computer and use it in GitHub Desktop.
Save njohnson7/1a3b3e79e9364fa3500be2bfb8b80001 to your computer and use it in GitHub Desktop.
Class Records Summary
const EXAM_WEIGHT = 0.65;
const EXERCISE_WEIGHT = 0.35;
const generateClassRecordSummary = students => {
let studentGrades = generateStudentGrades(students);
let examSummaries = generateExamSummaries(students);
return { studentGrades: studentGrades, exams: examSummaries };
};
const generateStudentGrades = students => {
return Object.keys(students).map(student => {
let examScoresAvg = findAvg(students[student].scores.exams);
let exerciseScoresSum = findSum(students[student].scores.exercises)
let percentGrade = findPercentGrade(examScoresAvg, exerciseScoresSum);
let letterGrade = findLetterGrade(percentGrade);
return `${percentGrade} (${letterGrade})`;
});
};
const generateExamSummaries = students => {
let examScoresByStudent = extractExamScores(students);
return examScoresByStudent[0].map((_, studentNum) => {
let examScoresByExam = findExamScoresByExam(examScoresByStudent, studentNum);
let avg = findAvg(examScoresByExam);
let [min, max] = findMinMax(examScoresByExam);
return { average: avg, minimum: min, maximum: max };
});
};
const extractExamScores = students => {
return Object.keys(students).map(student => students[student].scores.exams);
};
const findExamScoresByExam = (examScoresByStudent, studentNum) => {
return examScoresByStudent.map(exam => exam[studentNum]);
};
const findSum = scores => scores.reduce((sum, score) => sum + score, 0);
const findAvg = scores => findSum(scores) / scores.length;
const findMinMax = scores => [Math.min(...scores), Math.max(...scores)];
const findPercentGrade = (examScoresAvg, exerciseScoresSum) => {
return Math.round(examScoresAvg * EXAM_WEIGHT + exerciseScoresSum * EXERCISE_WEIGHT);
};
const findLetterGrade = score => {
if (score >= 93) return 'A';
else if (score >= 85) return 'B';
else if (score >= 77) return 'C';
else if (score >= 69) return 'D';
else if (score >= 60) return 'E';
else return 'F';
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment