// clockwise
// 123 41
// 456 -> 52
// 63
// (2x3) (3x2)
fn rotate_cw<T: Clone>(arr: &Vec<Vec<T>>) -> Vec<Vec<T>> {
let (n, m) = (arr.len(), arr[0].len());
let mut res = vec![vec![arr[0][0].clone(); n]; m];
for r in 0..n {
for c in 0..m {
res[c][n - 1 - r] = arr[r][c].clone();
}
}
res
}
// counterclockwise
// 123 36
// 456 -> 25
// 14
// (2x3) (3x2)
fn rotate_ccw<T: Clone>(arr: &Vec<Vec<T>>) -> Vec<Vec<T>> {
let (n, m) = (arr.len(), arr[0].len());
let mut res = vec![vec![arr[0][0].clone(); n]; m];
for r in 0..n {
for c in 0..m {
res[m - 1 - c][r] = arr[r][c].clone();
}
}
res
}