【JavaScript】2次元配列を90度回転する
2次元配列の回転です。
2次元配列の左90度回転
rotate.js// 2次元配列の左90度回転
function rotate(array) {
const ROW = array.length;
const COL = array[0].length;
const col = COL-1;
const a = [];//new Array(COL);
for (let c=0; c<COL; c++) {
a[c] = [];//new Array(ROW);
for (let r=0; r<ROW; r++) {
a[c][r] = array[r][col-c];
}
}
return a;
};
rotate.js// 2次元配列の左90度回転(ワンライナー版)
const rotate = a => a[0].map((_, c) => a.map(r => r[c])).reverse();
使用例
// 座標平面のイメージ
// y
// [3,6]
// [6,5,4] [2,5]
// [3,2,1] [1,4]
// 0 x
// [4,1] [1,2,3]
// [5,2] [4,5,6]
// [6,3]
const rotate = a => a[0].map((_, c) => a.map(r => r[c])).reverse();
let a = [
[1,2,3],
[4,5,6]
];
// 第一象限
rotate(a);
// [[3,6],
// [2,5],
// [1,4]]
// 第二象限
rotate(rotate(a));
// [[6,5,4],
// [3,2,1]]
// 第三象限
rotate(rotate(rotate(a)));
// [[4,1],
// [5,2],
// [6,3]]
// 第四象限
rotate(rotate(rotate(rotate(a))));
// [[1,2,3],
// [4,5,6]]
2次元配列の右90度回転
rotate.js// 2次元配列の右90度回転
function rotate(array) {
const ROW = array.length;
const COL = array[0].length;
const row = ROW-1;
const a = [];//new Array(COL);
for (let c=0; c<COL; c++) {
a[c] = [];//new Array(ROW);
for (let r=0; r<ROW; r++) {
a[c][r] = array[row-r][c];
}
}
return a;
};
rotate.js// 2次元配列の右90度回転(ワンライナー版)
const rotate = a => a[0].map((_, c) => a.map(r => r[c]).reverse());
補足:2次元配列の転置(行列の入れ替え)
transpose.js// 2次元配列の転置
function transpose(array) {
const ROW = array.length;
const COL = array[0].length;
const a = [];//new Array(COL);
for (let c=0; c<COL; c++) {
a[c] = [];//new Array(ROW);
for (let r=0; r<ROW; r++) {
a[c][r] = array[r][c];
}
}
return a;
};
transpose.js// 2次元配列の転置(ワンライナー版)
const transpose = a => a[0].map((_, c) => a.map(r => r[c]));
使用例
const transpose = a => a[0].map((_, c) => a.map(r => r[c]));
let a = [
[1,2,3],
[4,5,6]
];
// 転置
transpose(a);
// [[1,4],
// [2,5],
// [3,6]]
// 転置の転置
transpose(transpose(a));
// [[1,2,3],
// [4,5,6]]