Распечатать матрицу в полукруглом порядке - PullRequest
2 голосов
/ 12 марта 2020

У меня есть, скажем, матрица 3 (строка) на 5 (столбец), заполненная числами от 1, выглядящие так:

 1  2  3  4  5
 6  7  8  9 10
11 12 13 14 15

Значения должны быть напечатаны в полукруглом порядке, начиная с вертикально внизу слева: 11 6 1 5 10 15 12 7 2 4 9 14 13 8 3.

Среди прочего это то, что я пытался; Я знаю, что моя текущая попытка слишком сложна, но через 2 дня я все еще не знаю, как переключаться между печатью столбцов противоположной стороны.

var c = 0;
var i, j, k, l;
do {
  if (c == 0) {
    c++;
    for (j = 0; j < farm[0].length; j++) {
      for (i = farm.length - 1; i >= 0; i--)
        document.write(farm[i][j] + " ");
      break;
    }
  } else {
    c--;
    for (l = farm[0].length - 1; l >= 0 ; l++) {
      for (k = 0; k < farm.length; k++)
        document.write(farm[k][l] + " ");
      break;
    }
  }
} while (j < l);

Ответы [ 2 ]

1 голос
/ 12 марта 2020

Вы можете создать отдельную функцию, которая печатает указанный столбец c, а затем печатает необходимые столбцы. Также используйте аргумент с именем dir, который указывает, в каком направлении должен быть напечатан столбец

const arr = [[1,  2,  3,  4,  5],
 [6,  7,  8,  9, 10],
[11, 12, 13, 14, 15]];

function printCol(mat,col,dir){
  
  for(let i = 0; i < mat.length; i++){
    let row = dir === 1 ? i : mat.length - 1 - i;
    console.log(mat[row][col]);
  }
}
for(let i = 0; i < Math.ceil(arr[0].length)/2; i++){
  let col1 = i;
  let col2 = arr[0].length - 1 - i;
  if(col1 !== col2){
    printCol(arr, col1, -1);
    printCol(arr, col2, 1);
  }
  else printCol(arr, col1);
}
0 голосов
/ 12 марта 2020

const matrix = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]];
const spiral = ra => {
	// generate the order which the columns must follow, [0, 4, 1, 3, 2]
	const columns = [...Array(ra[0].length)].map((v, i) => i % 2 === 0 ? i / 2 : ra[0].length - Math.ceil(i / 2));
	// reverse the column of the matrix if its index is <= Math.floor(ra.length / 2)
	return columns.reduce((a, v, i) => i % 2 === 0 ? a.concat(ra.map(c => c[v]).reverse()) : a.concat(ra.map(c => c[v])), []);
}
console.log(...spiral(matrix));
...