Професионална програма
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
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
CvetanPetkov avatar CvetanPetkov 47 Точки

Интересно решение, но така проверяваш само хоризонтално и вертикално по една линия на кръст спрямо позицията(frown). И ако една проверка от първия цикъл дава резултат 5, а следващата итерация даде резултат 6 не ни показва грешката. Може би в на4алото вземи един сбор ето така: 

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

и после сравнявай с него.

Ето с този входти гърми и мисля, че е разбираемо кое как и къде:

arr = [ '2 0 0',
        '0 2 0',
        '0 0 1'];

solve(arr);
0
ochikov avatar ochikov 35 Точки

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

 

 

Поздрави :) 

0
ochikov avatar ochikov 35 Точки
function solve(arr) {


    let matrix = arr.map(x => x.split(" ").map(Number));
    let rowSum = 0;
    let colSum = 0;
    let equal = false;
    let sumInitial = matrix[0].reduce((a, b) => a + b, 0);


    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 == sumInitial) && (colSum == sumInitial)) {
            equal = true;
        }
        else {
            equal = false;
        }
       // console.log(rowSum + " ---- " + colSum)
        rowSum = 0;
        colSum = 0;

    }
    console.log(equal);
}

arr = ['1 0 0',
    '0 0 1',
    '0 1 0'];

solve(arr);

Колега,

ето ми кода, като добавих sumInitial както ти ми каза и сравнявам всяка колона и всеки ред с него. Отново ми гърми обаче. На примера, който ти ми даде ми дава "false", което е ОК. Отново трети тест ми е "грешка при изпълнение", а четвърти ми е с "грешен отговор".

 

Извинявам се за спама, може ли още малко помощ?

 

Поздрави.

 

 

0
09/02/2017 10:45:32
CvetanPetkov avatar CvetanPetkov 47 Точки

Сега кода ти ще гръмне с ето този вход:

arr = [ '0 0 0',
        '0 2 0',
        '0 0 0'];

Какъвто и резултат да имат изчисленията ти ще важи само последната итерация и посдледната проверка. Виж моя код:

https://github.com/CvetanPetkov/JavaScriptFundamentals/blob/master/06_Arrays_Matrices/Excersice/p07_Matrices.js

Опитай се да го анализираш!

0