Guest User

Untitled

a guest
Apr 20th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.69 KB | None | 0 0
  1. var studentScores = {
  2. student1: {
  3. id: 123456789,
  4. scores: {
  5. exams: [90, 95, 100, 80],
  6. exercises: [20, 15, 10, 19, 15],
  7. },
  8. },
  9. student2: {
  10. id: 123456799,
  11. scores: {
  12. exams: [50, 70, 90, 100],
  13. exercises: [0, 15, 20, 15, 15],
  14. },
  15. },
  16. student3: {
  17. id: 123457789,
  18. scores: {
  19. exams: [88, 87, 88, 89],
  20. exercises: [10, 20, 10, 19, 18],
  21. },
  22. },
  23. student4: {
  24. id: 112233445,
  25. scores: {
  26. exams: [100, 100, 100, 100],
  27. exercises: [10, 15, 10, 10, 15],
  28. },
  29. },
  30. student5: {
  31. id: 112233446,
  32. scores: {
  33. exams: [50, 80, 60, 90],
  34. exercises: [10, 0, 10, 10, 0],
  35. },
  36. },
  37. };
  38.  
  39. var EXAMWEIGHT = .65;
  40.  
  41. var EXERCISEWEIGHT = .35;
  42.  
  43. function generateClassRecordSummary(scores) {
  44. var studentGrades = Object.keys(scores).map(getStudentGrade);
  45. var exams = groupExamsByIndex();
  46. var examSummary = generateExamSummary(exams);
  47.  
  48. function getStudentGrade(student) {
  49. var exams = scores[student].scores.exams;
  50. var exercises = scores[student].scores.exercises;
  51. var grade = calculateGrade(exams, exercises);
  52. return convertGrade(grade);
  53. }
  54.  
  55. function groupExamsByIndex() {
  56. var exams = Object.keys(scores).map(getExams);
  57. var examGroup = [];
  58. var i;
  59. var length = exams[0].length;
  60.  
  61. for (i = 0; i < length; i++) {
  62. var group = [];
  63. exams.forEach(function(element) {
  64. group.push(element[i]);
  65. });
  66.  
  67. examGroup.push(group);
  68. }
  69.  
  70. return examGroup;
  71. }
  72.  
  73. function generateExamSummary(exams) {
  74. return exams.map(createStudentExamSummary);
  75. }
  76.  
  77. function getExams(student) {
  78. var exams = scores[student].scores.exams;
  79. return exams;
  80. }
  81.  
  82. return examSummary;
  83. }
  84.  
  85. function createStudentExamSummary(exam) {
  86. return { average: calculateStudentAverageExam(exam), minimum: getMinScore(exam), maximum: getMaxScore(exam) }
  87. }
  88.  
  89. function calculateGrade(exams, exercises) {
  90. var examscore = calculateExamScore(exams);
  91. var exercisescore = calculateExerciseScore(exercises);
  92.  
  93. return examscore + exercisescore;
  94. }
  95.  
  96. function calculateExamScore(exams) {
  97. return (calculateStudentAverageExam(exams) * EXAMWEIGHT);
  98. }
  99.  
  100. function calculateStudentAverageExam(array) {
  101. return array.reduce(add)/array.length;
  102. }
  103.  
  104. function calculateExerciseScore(exercises) {
  105. return exercises.reduce(add) * EXERCISEWEIGHT;
  106. }
  107.  
  108. function add(grade1, grade2) {
  109. return grade1 + grade2;
  110. }
  111.  
  112. function getMaxScore(array) {
  113. return array.reduce(maximumExamGrade);
  114. }
  115.  
  116. function getMinScore(array) {
  117. return array.reduce(minimumExamGrade);
  118. }
  119.  
  120. function minimumExamGrade(result, value) {
  121. return result <= value ? result : value;
  122. }
  123.  
  124. function maximumExamGrade(result, value) {
  125. return result >= value ? result : value;
  126. }
  127.  
  128. function convertGrade(score) {
  129. if (gradeIsA(score)) {
  130. return "" + Math.round(score) + " (A)";
  131. } else if (gradeIsB(score)) {
  132. return "" + Math.round(score) + " (B)";
  133. } else if (gradeIsC(score)) {
  134. return "" + Math.round(score) + " (C)";
  135. } else if(gradeIsD(score)) {
  136. return "" + Math.round(score) + " (D)";
  137. } else if(gradeIsE(score)) {
  138. return "" + Math.round(score) + " (E)";
  139. } else if(gradeIsF(score)) {
  140. return "" + Math.round(score) + " (F)";
  141. }
  142. }
  143.  
  144. function gradeIsA(score) {
  145. return Math.round(score) > 92 && Math.round(score) <= 100;
  146. }
  147.  
  148. function gradeIsB(score) {
  149. return Math.round(score) > 84 && Math.round(score) <= 92;
  150. }
  151.  
  152. function gradeIsC(score) {
  153. return Math.round(score) > 76 && Math.round(score) <= 84;
  154. }
  155.  
  156. function gradeIsD(score) {
  157. return Math.round(score) > 68 && Math.round(score) <= 76;
  158. }
  159.  
  160. function gradeIsE(score) {
  161. return Math.round(score) > 59 && Math.round(score) <= 68;
  162. }
  163.  
  164. function gradeIsF(score) {
  165. return Math.round(score) <= 59;
  166. }
  167.  
  168. generateClassRecordSummary(studentScores);
Add Comment
Please, Sign In to add comment