Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Квадратная матрица, максимальные значения по параллельным побочной диагонали (https://javascript.ru/forum/misc/78784-kvadratnaya-matrica-maksimalnye-znacheniya-po-parallelnym-pobochnojj-diagonali.html)

Retro_1477 05.11.2019 09:48

Квадратная матрица, максимальные значения по параллельным побочной диагонали
 
Создать функцию, формирующая строку из максимальных элементов диагоналей целочисленного квадратного массива, параллельных его побочной диагонали.

Например дана матрица:
1 2 3 4
5 6 7 8
9 8 7 6
5 4 3 2

Диагонали: 1| 2 5| 3 6 9| 4 7 8 5| 8 7 4| 6 3| 2

На выходе: 1, 5, 9, 8, 8, 6, 2


Наработки
let sizeArray = 5;
  let width = sizeArray - 1;
  let height = sizeArray - 1;
  let matrix = [];

  for (let i = 0; i < sizeArray; i++) {
    matrix[i] = []
    for (let j = 0; j < sizeArray; j++) {
      matrix[i][j] = random(-99, 99);
    }
  }

let random = (min, max) => Math.round(Math.random() * (max - min) + min);

let arrMax = arr => {
  return arr.reduce(function (p, v) {
    return (p > v ? p : v);
  });
}
:help:

рони 05.11.2019 11:38

матрица максимум по диагонали
 
Retro_1477,

let matrix = [];
let width = 5;
let height = 3;

let random = (min, max) => Math.round(Math.random() * (max - min) + min);
for (let i = 0; i < height; i++) {
    matrix[i] = []
    for (let j = 0; j < width; j++) {
        matrix[i][j] = random(-99, 99);
    }
};
let res = [];
for (let k = 0; k < (width + height) - 1; k++) {
    let j = k < height ? 0 : k - height + 1;
    let i = k < height ? k : height - 1;
    let a = [];
    for (; matrix[i] && matrix[i][j] !== void 0; j++, i--) {
        a.push(matrix[i][j])
    }
    a = Math.max(...a)
    res.push(a);
};

console.log(res);
console.table(matrix);

Retro_1477 05.11.2019 13:31

Спасибо, великий

Alexandroppolus 05.11.2019 18:18

function maxdiags(m) {
  var len = m.length;
  var res = new Array(len * 2 - 1);
  for (var i = 0; i < len; ++i) {
    for (var j = 0; j < len; ++j) {
      res[i + j] = Math.max(res[i + j] || -Infinity, m[i][j]);
    }
  }
  return res;
}

var matrix = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 8, 7, 6],
[5, 4, 3, 2]
];

console.log(matrix);
console.log(maxdiags(matrix));

рони 05.11.2019 18:34

Alexandroppolus,
:victory:


Часовой пояс GMT +3, время: 13:40.