Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function solve(arr) {
- var regex = /((?:[a-z]+)(?: [a-z]+)?)\s*-\s*([\S].*[\S])\s*:\s*(\d+)/i;
- var exams = {};
- var student,
- exam,
- result;
- for (var i = 0; i < arr.length; i++) {
- var obj = arr[i];
- var match = obj.match(regex);
- result = Number(match[3].trim());
- student = match[1].trim();
- exam = match[2].trim();
- if (result < 0 || result > 400) {
- continue;
- }
- if (!(exam in exams)) {
- exams[exam] = [];
- exams[exam].push({name: student, result: result, makeUpExams: 0});
- continue;
- }
- for (var j = 0, len = exams[exam].length; j < len; j++) {
- var entry = exams[exam][j];
- if (entry.name === student) {
- entry.makeUpExams++;
- entry.result = Math.max(result, entry.result);
- break;
- }
- if (j === len - 1) {
- exams[exam].push({name: student, result: result, makeUpExams: 0});
- }
- }
- }
- for (var exam in exams) {
- exams[exam] = exams[exam].sort(function (x,y) {
- if (x.result > y.result) {
- return -1;
- } else if (x.result < y.result) {
- return 1;
- }
- if (x.makeUpExams > y.makeUpExams) {
- return 1;
- } else if (x.makeUpExams < y.makeUpExams) {
- return -1;
- }
- return x.name.localeCompare(y.name);
- });
- }
- console.log(JSON.stringify(exams));
- }
- //var arr = [ 'Peter Jackson - Java : 350',
- // 'Jane - JavaScript : 200',
- // 'Jane - JavaScript : 400',
- // 'Simon Cowell - PHP : 100',
- // 'Simon Cowell-PHP: 500',
- // 'Simon Cowell - PHP : 200' ];
- //arr = ['Simon Cowell - PHP : 100',
- // 'Simon Cowell-PHP: 500',
- // 'Peter Jackson - PHP: 350',
- // 'Simon Cowell - PHP : 360'];
- //
- //solve(arr);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement