Advertisement
Guest User

Untitled

a guest
Nov 24th, 2014
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. readInput();
  2.  
  3. function readInput() {
  4.     var input = [
  5.         'name^courses',
  6.         '{"id":0,"firstname":"Angel","lastname":"Ivanov","town":"Plovdiv","role":"student","grades":["5.89"],"level":2,"certificate":false}',
  7.         '{"id":1,"firstname":"Mitko","lastname":"Nakova","town":"Dimitrovgrad","role":"trainer","courses":["PHP","Unity Basics"],"lecturesPerDay":6}',
  8.         '{"id":2,"firstname":"Angel","lastname":"Georgiev","town":"Varna","role":"student","grades":["5.59","3.50","4.54","5.05","3.45"],"level":4,"certificate":false}',
  9.         '{"id":3,"firstname":"Ivan","lastname":"Ivanova","town":"Vidin","role":"trainer","courses":["JS","Java","JS OOP","Database","OOP","C#"],"lecturesPerDay":7}',
  10.         '{"id":4,"firstname":"Mitko","lastname":"Petrova","town":"Sofia","role":"trainer","courses":["Database","JS Apps"],"lecturesPerDay":2}'
  11.     ];
  12.  
  13.     solve(input);
  14. }
  15.  
  16. function solve(input) {
  17.     var criterias = input[0].split(/[\^]+/);
  18.     var studentsCriteria = criterias[0];
  19.     var trainersCriteria = criterias[1];
  20.  
  21.     var data = {};
  22.     data.students = [];
  23.     data.trainers = [];
  24.  
  25.     for (var index = 1; index < input.length; index++) {
  26.         var element = JSON.parse(input[index]);
  27.  
  28.         if (element.role == "student") {
  29.             data.students.push({});
  30.             data.students[data.students.length - 1].id = element.id;
  31.             data.students[data.students.length - 1].firstname = element.firstname;
  32.             data.students[data.students.length - 1].lastname = element.lastname;
  33.             data.students[data.students.length - 1].averageGrade = calculateAverageGrade(element.grades);
  34.             data.students[data.students.length - 1].certificate = element.certificate;
  35.             data.students[data.students.length - 1].level = element.level;
  36.         } else {
  37.             data.trainers.push({});
  38.             data.trainers[data.trainers.length - 1].id = element.id;
  39.             data.trainers[data.trainers.length - 1].firstname = element.firstname;
  40.             data.trainers[data.trainers.length - 1].lastname = element.lastname;
  41.             data.trainers[data.trainers.length - 1].courses = element.courses;
  42.             data.trainers[data.trainers.length - 1].lecturesPerDay = element.lecturesPerDay;
  43.         }
  44.     }
  45.  
  46.     if (studentsCriteria == "level") {
  47.         data.students.sort(function (a, b) {
  48.             if (parseInt(a.level) - parseInt(b.level) == 0) {
  49.                 return parseInt(a.id) - parseInt(b.id);
  50.             } else {
  51.                 return parseInt(a.level) - parseInt(b.level);
  52.             }
  53.         });
  54.     } else {
  55.         data.students.sort(function (a, b) {
  56.             if (a.firstname == b.firstname) {
  57.                 if (a.lastname < b.lastname) return -1;
  58.                 if (a.lastname > b.lastname) return 1;
  59.                 return 0;
  60.             } else {
  61.                 if (a.firstname < b.firstname) return -1;
  62.                 if (a.firstname > b.firstname) return 1;
  63.                 return 0;
  64.  
  65.             }
  66.         });
  67.     }
  68.  
  69.     for (var index = 0; index < data.students.length; index++) {
  70.         delete data.students[index].level;
  71.     }
  72.  
  73.     data.trainers.sort(function (a, b) {
  74.         if (a.courses.length - b.courses.length == 0) {
  75.             return parseInt(a.lecturesPerDay) - parseInt(b.lecturesPerDay) // !
  76.         } else {
  77.             return a.courses.length - b.courses.length;
  78.         }
  79.     });
  80.  
  81.     console.log(JSON.stringify(data));
  82.  
  83.     function calculateAverageGrade(grades) {
  84.         var averageGrade = 0;
  85.         for (var grade = 0; grade < grades.length; grade++) {
  86.             averageGrade += parseFloat(grades[grade]);
  87.         }
  88.  
  89.         averageGrade /= grades.length;
  90.         return averageGrade.toFixed(2);
  91.     }
  92.  
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement