Venciity

Java Basics Exam 27 May 2014 - Orders

Jul 26th, 2014
333
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function Solve(args) {
  2.     var map = {};
  3.  
  4.     var n = parseInt(args[0]);
  5.     Array.prototype.toString = function () { // тази функция ще посочи как да се дисплейне масива в общият случай
  6.         return this.join(' ');
  7.     }
  8.  
  9.     for (var i = 0; i < n; i++) {
  10.         var splitHolder = args[i + 1].split(' '); // раздробяваме стринга на 3 елемента
  11.  
  12.         if (!(splitHolder[2] in map)) { // проверяваме дали има item с такъв key - ако няма - влизаме в този IFS
  13.             map[splitHolder[2]] = []; // създаваме глобален масив, който ще държи всички [имена и стойности]
  14.                                       // т.е. ще имаме "apples" = [[maria, 9][alben, 10][gonzo, 11]];
  15.             map[splitHolder[2]][0] = []; // създаваме масив за всеки отделен човек
  16.             map[splitHolder[2]][0].toString = function () { // конкретно за тези които са във map[splitHolder[2]][0],
  17.                 return this.join(', '); // т.е. свързването между отделните масиви в глобалният масив
  18.             }
  19.             var temp = []; // този масив ще използвам за да push-на 2те properties
  20.             temp.push(splitHolder[0]);
  21.             temp.push(parseInt(splitHolder[1]));
  22.  
  23.             map[splitHolder[2]][0].push(temp); // и след това pushвам масива temp в глобалният като отделен "order"
  24.         }
  25.         else { // ако имаме вече такъв ключ
  26.             var found = false;
  27.  
  28.             // използвам този цикъл за да проверя всеки масив в глобалният по име и да увелича стойноста на плодовете
  29.             for (var j = 0; j < map[splitHolder[2]][0].length; j++) {
  30.                 if (map[splitHolder[2]][0][j][0] == splitHolder[0]) { // ако намерим такова име
  31.                     // увеличаваме вроя на плодовете , като към предната стойност добавяме новата
  32.                     map[splitHolder[2]][0][j][1] += parseInt(splitHolder[1]);
  33.                     found = true; // добавяме флаг за да знаме дали да добавим нов "order"
  34.                 }
  35.             }
  36.  
  37.             if (!found) { // ако не е намерен "not found" такъв "order" от цикълът горе, добавяме
  38.                 var temp = []; // същата процедура като в първият IF
  39.                 temp.push(splitHolder[0]);
  40.                 temp.push(parseInt(splitHolder[1]));
  41.  
  42.                 map[splitHolder[2]][0].push(temp);
  43.             }
  44.  
  45.             // сортирам с помощта на "override" на compare  за да мога да взема стойност на първият елемент
  46.             // т.е. на името и по него сравнявам
  47.             map[splitHolder[2]][0].sort(compare);
  48.         }
  49.     }
  50.    
  51.     for (var key in map) {
  52.         console.log("%s: %s", key, map[key]); // принриам готовият резултат
  53.     }
  54.  
  55.     function compare(a, b) {
  56.         // а и b са масиви , функцията sort иползва a и b за да подрежда елементите в зависимост от каква стойност връщат
  57.         // ако името на b е по-голямо се връща -1 , т.е. представете си го така : ако лявата страна е по-малка връща : -1
  58.         // както е в кординатната система "а" е отляво и ако е по-малко се връща -1
  59.         // ако b е по-малко, гледаме дясната страна на кординатната и връща 1
  60.         // ако са равни връща 0 , така като са масиви, можем да надникнем в имента с индекса "0"
  61.         if(a[0] < b[0]) {
  62.             return -1;
  63.         }
  64.         if (b[0] < a[0]) {
  65.             return 1;
  66.         }
  67.  
  68.         return 0;
  69.     }
  70. }
Advertisement
Add Comment
Please, Sign In to add comment