Vassil_Iliev

now

Apr 27th, 2022
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Students graduation
  2.  
  3. /**
  4.  *
  5.  * @param {{ course: string, passingGrade: number, students: Array<{id: number, name: string}>, grades: Array<{ studentId: number, grade: number}>, exams: Array<{ studentId: number, grade: number }>} data
  6.  */
  7. export default function (data) {
  8.   const students = data.students.map((student) => {
  9.  
  10.     const grades = data.grades
  11.       .filter((x) => {
  12.         if (x.studentId === student.id || x.studentName === student.name)
  13.    
  14.         return x.grade;
  15.       })
  16.       .map((x) => {
  17.    
  18.         return x.grade;
  19.       });
  20.  
  21.     const avgGradeGrades =
  22.       (grades.reduce((acc, el) => acc + el, 0) / grades.length) * 0.4;
  23.  
  24.     const examGrades = data.exams
  25.       .filter((x) => {
  26.         if (x.studentId === student.id || x.studentName === student.name)
  27.    
  28.         return x.grade;
  29.       })
  30.       .map((x) => {
  31.    
  32.         return x.grade;
  33.       });
  34.  
  35.     const avgGradeExam =
  36.       examGrades.length === 0 ? 0 : (examGrades.reduce((acc, el) => acc + el, 0) / examGrades.length) * 0.6;
  37.  
  38.     const finalGrade = avgGradeGrades + avgGradeExam;
  39.  
  40.     return { ...student, grade: finalGrade, attendsToExam: examGrades.length };
  41.   });
  42.  
  43.   return {
  44.     name: data.course,
  45.  
  46.     graduates: students.reduce((acc, el) => {
  47.       if (el.grade >= data.passingGrade && el.attendsToExam >= 2) {
  48.         acc.push({ id: el.id, name: el.name, grade: el.grade });
  49.       }
  50.    
  51.       return acc;
  52.     }, []),
  53.  
  54.     nonGraduates: students.reduce((acc, el) => {
  55.       if (el.grade < data.passingGrade && el.attendsToExam < 2) {
  56.         acc.push({ id: el.id, name: el.name, reason: "score and exams" });
  57.       } else if (el.grade < data.passingGrade && el.attendsToExam >= 2) {
  58.         acc.push({ id: el.id, name: el.name, reason: "score" });
  59.       } else if (el.grade >= data.passingGrade && el.attendsToExam < 2) {
  60.         acc.push({ id: el.id, name: el.name, reason: "exams" });
  61.       }
  62.    
  63.       return acc;
  64.     }, []),
  65.   };
  66. }
  67.  
Advertisement
Add Comment
Please, Sign In to add comment