View difference between Paste ID: KdKd6B1Z and 7xtTf1QG
SHOW: | | - or go back to the newest paste.
1
function Solve(args) {
2
    var map = {};
3
4
    var n = parseInt(args[0]);
5-
    Array.prototype.toString = function() { // tazi funkciq shte poso4i kak da se display-ne array v obshtiq slu4ai
5+
    Array.prototype.toString = function () { // тази функция ще посочи как да се дисплейне масива в общият случай
6
        return this.join(' ');
7
    }
8
9-
    for(var i = 0; i < n; i++) {
9+
    for (var i = 0; i < n; i++) {
10-
        var splitHolder = args[i+1].split(' ');  // razdrobqvame stringa na 3 elementa
10+
        var splitHolder = args[i + 1].split(' '); // раздробяваме стринга на 3 елемента
11
12-
        if(!(splitHolder[2] in map)) { // proverqvame dali ima item s takav key - ako nqma - vlizame v tozi IF
12+
        if (!(splitHolder[2] in map)) { // проверяваме дали има item с такъв key - ако няма - влизаме в този IFS
13-
            map[splitHolder[2]] = []; // suzdavame "globalen" array , koito shte durji vsi4ki [imena i stoinosti]
13+
            map[splitHolder[2]] = []; // създаваме глобален масив, който ще държи всички [имена и стойности]
14-
                                        //toest shte imame "apples" = [[maria, 9], [alben, 10], [gonzo, 11]];
14+
                                      // т.е. ще имаме "apples" = [[maria, 9][alben, 10][gonzo, 11]];
15-
            map[splitHolder[2]][0] = []; // suzdavame array za vseki otdelen 4ovek
15+
            map[splitHolder[2]][0] = []; // създаваме масив за всеки отделен човек
16-
            map[splitHolder[2]][0].toString = function() { // konkretno za tezi koito sa vuv map[splitHolder[2]][0],
16+
            map[splitHolder[2]][0].toString = function () { // конкретно за тези които са във map[splitHolder[2]][0],
17-
                return this.join(', ');  // toest svurzvaneto mejdu otdelnite arrays v globalniq array
17+
                return this.join(', '); // т.е. свързването между отделните масиви в глобалният масив
18
            }
19-
            var temp = []; // tozi array shte izpolzvam za da pusha 2-te properties
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);  // i sled tova pushvam temp array v globalniq kato otdelen "order"
23+
            map[splitHolder[2]][0].push(temp); // и след това pushвам масива temp в глобалният като отделен "order"
24
        }
25
        else { // ако имаме вече такъв ключ
26-
        else {     // ako imame ve4e takav klu4
26+
            var found = false;
27-
            var found = false;      // izpolzvam tozi cikul za da proverq vseki masiv v globalniq po ime i da uveli4a stoinosta na plodovete
27+
28-
            for(var j = 0;j < map[splitHolder[2]][0].length; j++) {
28+
            // използвам този цикъл за да проверя всеки масив в глобалният по име и да увелича стойноста на плодовете
29-
                if(map[splitHolder[2]][0][j][0] == splitHolder[0]) {   //ako namerim takova ime
29+
            for (var j = 0; j < map[splitHolder[2]][0].length; j++) {
30-
                    map[splitHolder[2]][0][j][1] += parseInt(splitHolder[1]);// uveli4avame broq na plodovete, kato kum prednata stoinost dobavqme novata
30+
                if (map[splitHolder[2]][0][j][0] == splitHolder[0]) { // ако намерим такова име
31-
                    found = true; // dobavqme flag za da znaem dali da dobavim nov order
31+
                    // увеличаваме вроя на плодовете , като към предната стойност добавяме новата
32
                    map[splitHolder[2]][0][j][1] += parseInt(splitHolder[1]);
33
                    found = true; // добавяме флаг за да знаме дали да добавим нов "order"
34-
            if(!found) { // ako ne e nameren "not found" takav order ot loopa gore, dobavqme
34+
35-
                var temp = [];      // sushtata prcedura kato v purviq IF
35+
36
37
            if (!found) { // ако не е намерен "not found" такъв "order" от цикълът горе, добавяме
38
                var temp = []; // същата процедура като в първият IF
39
                temp.push(splitHolder[0]);
40
                temp.push(parseInt(splitHolder[1]));
41-
            map[splitHolder[2]][0].sort(compare);  // sortiram s pomoshta na "override" na compare za da moga da vzema stoinostta na parviq element,
41+
42-
                                                    // toest na imeto i po nego da sravnqvam
42+
43
            }
44
45
            // сортирам с помощта на "override" на compare  за да мога да взема стойност на първият елемент
46-
    for(var key in map) {
46+
            // т.е. на името и по него сравнявам
47-
          console.log("%s: %s", key, map[key]);  // printiram gotoviq rezultat
47+
            map[splitHolder[2]][0].sort(compare);
48
        }
49
    }
50
    
51-
        if(a[0] < b[0]) return -1;   // a i b sa 2 arrays, funciqta sort izpolzva a i b za da podrejda elementite v zavisimost ot kakva stoinost vrashtat
51+
    for (var key in map) {
52-
        if(b[0] < a[0]) return 1;    // ako imeto na b e po golqmo se vrushta -1 , toest predstavete si go taka : ako lqvata strana e po malka se vrushta -1
52+
        console.log("%s: %s", key, map[key]); // принриам готовият резултат
53-
        return 0;                    // kakto e v koordinatnata sistema, "a" e otlqvo i ako e po malko vrushta -1 ako b e po malko gledame dqsnata strana na koordinatnata
53+
54-
                                    // i vrushta 1, ako sa ravni vrushta 0; tui kato sa arrays , mojem da nadniknem v imenata s indeksa "0"
54+
55
    function compare(a, b) {
56-
}
56+
        // а и b са масиви , функцията sort иползва a и b за да подрежда елементите в зависимост от каква стойност връщат
57
        // ако името на b е по-голямо се връща -1 , т.е. представете си го така : ако лявата страна е по-малка връща : -1
58-
Solve([8, "steve 8 apples", "maria 3 bananas", "kiro 3 bananas", "kiro 9 apples", "maria 2 apples", "steve 4 apples",
58+
        // както е в кординатната система "а" е отляво и ако е по-малко се връща -1 
59-
"kiro 1 bananas", "kiro 1 apples"]);
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
}