You are viewing a single comment's thread. Return to all comments →
JS
let copy = []; let height = matrix.length, width = matrix[0].length; for (let i = 0; i < matrix.length; i++) { copy[i] = [...matrix[i]]; } let begi = 0, begj = 0; while (height > 0 && width > 0) { let endi = height - 1 + begi, endj = width - 1 + begi; const outerCircleLength = height * 2 + width * 2 - 4; const realR = r % outerCircleLength; if (realR) { const map = {}; let i = begi, j = begj, index = 0; while (index < outerCircleLength) { map[index] = [i, j]; if (i === begi && j < endj) j++; else if (j === endj && i < endi) i++; else if (i === endi && j > begj) j--; else i--; index++; } let mapN = { ...map }; for (let oldPos = 0; oldPos < outerCircleLength; oldPos++) { let [oldX, oldY] = map[oldPos]; let newPos = (outerCircleLength + (oldPos - realR)) % outerCircleLength; let [newX, newY] = mapN[newPos]; matrix[newX][newY] = copy[oldX][oldY]; } } height -= 2; width -= 2; begi++; begj++; } matrix.forEach((v) => console.log(...v));
Seems like cookies are disabled on this browser, please enable them to open this website
Matrix Layer Rotation
You are viewing a single comment's thread. Return to all comments →
JS