function tileVariants(tile) {
const flipH = (t) => {
const newGrid = AOC.cloneArray(t.grid).reverse();
return { id: t.id, grid: newGrid };
};
const flipV = (t) => {
const newGrid = AOC.cloneArray(t.grid).map((row) => row.reverse());
return { id: t.id, grid: newGrid };
};
const transpose = (arr) => {
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < i; j++) {
const tmp = arr[i][j];
arr[i][j] = arr[j][i];
arr[j][i] = tmp;
}
}
return arr;
};
const rotate90 = (t) => {
const newGrid = transpose(AOC.cloneArray(t.grid)).map((row) =>
row.reverse()
);
return { id: t.id, grid: newGrid };
};
return [
AOC.identity,
rotate90,
(t) => flipV(flipH(t)),
(t) => flipV(flipH(rotate90(t))),
flipH,
flipV,
(t) => rotate90(flipV(t)),
(t) => rotate90(flipH(t))
].map((fn) => fn(tile));
}