Професионална програма
Loading...
+ Нов въпрос
InaAbadjieva avatar InaAbadjieva 8 Точки

07. Magic Matrices / Array&Matrices Exercise

Здравейте,

Това е кодът ми по задачата Magic Matrices от упражненията: https://github.com/inaabadjieva/SoftUni_JavaScript/blob/master/JS_Fundamentals/04_Arrays%26Strings/magicMatrix.js

Получавам 80 точки - третият тест ми гърми с runtime error...

Ще съм благодарна, ако някой даде идея какъв е проблемът?

 

Тагове:
0
JavaScript Fundamentals
djc_bg2015 avatar djc_bg2015 923 Точки
Best Answer

Здравей,

извади втория цикъл от вътре. Реално това:

		for(let col = 0; col < matrix[1].length; col++){
			colSum += matrix[row][col]
		}

е същото като 

let rowSum = matrix[row].map(Number).reduce((a, b) => a+ b, 0)

с първия цикъл си мини по редовете и с редуциране си провери вски ред, след това завърти нов цикъл с вложен в него, който да ходи по колоните и за всяка колона да минава по редовете. там си направи и останалите проверки и ще е ОК.

 

Другия вариант е само с един вложен цикъл (тоест два, първия ходи по колоните а вложения по редовете), който да ходи по колоните и след това на всеки ред да провериш и редовете, но на за всялка следваща колона ще повтаряш проверките за редовете.

Ако искаш работещ код, пиши и ще ти пратя.

Поздрави!

1
04/10/2016 19:34:48
InaAbadjieva avatar InaAbadjieva 8 Точки

Мерси за помощта. Аз всичко с ламбда функции го направих в крайна сметка: https://github.com/inaabadjieva/SoftUni_JavaScript/blob/master/JS_Fundamentals/04_Arrays%26Strings/magicMatrix.js 

Но минава всички тестове, така че е ок.

10x 

 

0
vpl2001 avatar vpl2001 54 Точки

Здравей!

А какво всъщност представлява този тест 3 в задачата - сумирам всичко в матрицата - без reduce, я с обхождане - и пак не минава - матрицата може ли да бъде назъбена или си е с равни дименсии? Мерси ако има инфо!

0
djc_bg2015 avatar djc_bg2015 923 Точки

Здравей,

няма как да ти кажа какъв е теста, защото не съм го виждал. Но на въпроиса ти дали може да е назъбена - твърдо не.

2
CvetanPetkov avatar CvetanPetkov 47 Точки

И на мен не ми минава 3-ти тест. Кода ми работи и с назъбена матрица (ако е по- проста).

https://gist.github.com/CvetanPetkov/854d30c0a4b66efb326ace0b08322754

0
Innos avatar Innos 419 Точки

 

Проблема е че този ред не ти дава реално сумата на една колона а ти дава пак сумата на един ред:

let sumCol = matrix[row].reduce((a, b) => a + b, 0);

Проблема идва от това че представяме матрицата като масив от редове където всеки ред е масив от елементи, това ни позволява лесно вземане на един ред (като масив от елементите му), но няма еквивалентен начин да се вземе една колона, понеже една колона примерно нулевата реално е всички елементи на нулевият индекс във всичките различни масиви (редове). Така че начина на вземане на една колона остава да обхождаме матрицата с 2 цикъла първият по колоните, вторият по редовете и да събираме стойностите на клетките, при едно извъртане на цикъла по колоните ще имаме сумата на една колона.

Edit:
Реално не е много коректно да казвам че не може, то всичко може ако искаш така че ето как можеш да си вземеш сумата на колоната с reduce :)

for (let col = 0; col < matrix[0].length; col++) {
        let sumCol = matrix.reduce((a, b) => a + b[col], 0);
        if (sumCol != sumInitial) {
            return false;
        }
}

 

2
08/10/2016 15:24:37
CvetanPetkov avatar CvetanPetkov 47 Точки

Да разбрах си грешката, благодаря ти. С малки промени сега работи на 100т.

0
ochikov avatar ochikov 35 Точки

Здравейте,

може ли малко помощ. Ето моя код, като ми гърми на 3-ти тест с Runtime Error  и на четвърти с грешка:

 

function solve(arr) {

    let matrix = arr.map(x => x.split(" ").map(Number));
    let rowSum = 0;
    let colSum = 0;
    let equal = false;
    for(let row = 0; row < matrix.length; row++) {
        for(let col = 0; col < matrix[row].length; col++) {
            rowSum += matrix[row][col];
            colSum += matrix[col][row];

        }
        if(rowSum == colSum) {
            equal = true;
        }
        console.log(rowSum + " ---- " + colSum)
        rowSum = 0;
        colSum = 0;

    }
    console.log(equal);
}


arr = [ '11 32 45',
        '21 0 1',
        '21 1 1'];

solve(arr);

 

0