2 次元配列の 90 度回転

GitHub last commit

概要

2 次元配列 $A$ を 90 度回転する.
rotate_ccw は反時計回りに,rotate_cw は時計回りに 90 度回転する.

制約

実装

// 👇👇👇👇👇👇👇👇👇👇👇👇 util/rotate 👇👇👇👇👇👇👇👇👇👇👇👇
trait Rotate: Transpose {
    fn rotate_ccw(&mut self);
    fn rotate_cw(&mut self);
}

impl<T: Clone> Rotate for Vec<Vec<T>> {
    fn rotate_ccw(&mut self) {
        self.transpose();
        self.reverse();
    }
    fn rotate_cw(&mut self) {
        self.reverse();
        self.transpose();
    }
}
// 👆👆👆👆👆👆👆👆👆👆👆👆 util/rotate 👆👆👆👆👆👆👆👆👆👆👆👆

// 👇👇👇👇👇👇👇👇👇👇👇👇 util/transpose 👇👇👇👇👇👇👇👇👇👇👇👇
trait Transpose {
    fn transpose(&mut self);
}

impl<T: Clone> Transpose for Vec<Vec<T>> {
    fn transpose(&mut self) {
        if self.len() == 0 {
            return;
        }
        *self = (0..self[0].len())
            .map(|j| (0..self.len()).map(|i| self[i][j].clone()).collect())
            .collect()
    }
}
// 👆👆👆👆👆👆👆👆👆👆👆👆 util/transpose 👆👆👆👆👆👆👆👆👆👆👆👆

Verified with

戻る