Advertisement
Guest User

School Register

a guest
Apr 10th, 2021
252
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function updateSchoolRegister(studentData) {
  2.     let register = {};
  3.     let pattern = /^Student name: (?<name>[A-Z][a-z]+), Grade: (?<grade>\d+), Graduated with an average score: (?<score>\d\.\d+)$/;
  4.  
  5.     for (let line of studentData) {
  6.         let { name, grade, score } = line.match(pattern).groups;
  7.         let student = { name, score };
  8.  
  9.         if (score < 3) continue;
  10.  
  11.         grade = Number(grade) + 1;
  12.  
  13.         if (!(grade in register)) {
  14.             register[grade] = [];
  15.         }
  16.  
  17.         register[grade].push(student);
  18.     }
  19.  
  20.     let output = Object.entries(register)
  21.         .sort(sortGrades)
  22.         .map(formatOutput)
  23.         .join('\n');
  24.  
  25.    
  26.     function sortGrades([gradeA], [gradeB]) {
  27.         return +gradeA - +gradeB;
  28.     }
  29.  
  30.     function averageScore(sum, { score }) {
  31.         return sum + Number(score);
  32.     }
  33.  
  34.     function getStudents(list, { name }) {
  35.         list.push(name);
  36.         return list;
  37.     }
  38.  
  39.     function formatOutput([grade, students]) {
  40.         let studentsCount = students.length;
  41.         let averageClassScore = students.reduce(averageScore, 0) / studentsCount;
  42.         let studentInfo = students.reduce(getStudents, []).join(', ');
  43.  
  44.         let msg = `${grade} Grade\n`;
  45.         msg += `List of students: ${studentInfo}\n`;
  46.         msg += `Average annual grade from last year: ${averageClassScore.toFixed(2)}\n`;
  47.  
  48.         return msg;
  49.     }
  50.  
  51.     return output.trim();
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement