function step(grid) {
const nRows = grid.length;
const nCols = grid[0].length;
let movement = false;
for (let row = 0; row < nRows; row++) {
let c1 = grid[row][0];
grid[row].push(c1);
for (let col = 0; col < nCols; col++) {
const c2 = grid[row][col + 1];
if (c1 === ">" && c2 === ".") {
movement = true;
grid[row][(col + 1) % nCols] = c1;
grid[row][col] = ".";
}
c1 = c2;
}
grid[row].pop();
}
let r1 = AOC.cloneArray(grid[0]);
grid.push(r1);
for (let row = 0; row < nRows; row++) {
const r2 = AOC.cloneArray(grid[row + 1]);
for (let col = 0; col < nCols; col++) {
if (r1[col] === "v" && r2[col] === ".") {
movement = true;
grid[(row + 1) % nRows][col] = grid[row][col];
grid[row][col] = ".";
}
}
r1 = r2;
}
grid.pop();
return movement;
}