Last active
August 13, 2017 09:21
-
-
Save njohnson7/1a3b3e79e9364fa3500be2bfb8b80001 to your computer and use it in GitHub Desktop.
Class Records Summary
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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