rustgym 0.2.0

rustgym solutions
Documentation
struct Solution;

impl Solution {
    fn is_magic(grid: &[Vec<i32>], r: usize, c: usize) -> bool {
        let mut xor = 0;
        for i in 1..10 {
            xor ^= i;
        }
        for i in 0..3 {
            for j in 0..3 {
                xor ^= grid[r + i][c + j];
            }
        }
        if xor != 0 {
            return false;
        }
        let r0 = grid[r][c] + grid[r][c + 1] + grid[r][c + 2];
        if r0 != 15 {
            return false;
        }
        let r1 = grid[r + 1][c] + grid[r + 1][c + 1] + grid[r + 1][c + 2];
        if r1 != 15 {
            return false;
        }
        let r2 = grid[r + 2][c] + grid[r + 2][c + 1] + grid[r + 2][c + 2];
        if r2 != 15 {
            return false;
        }
        let c0 = grid[r][c] + grid[r + 1][c] + grid[r + 2][c];
        if c0 != 15 {
            return false;
        }
        let c1 = grid[r][c + 1] + grid[r + 1][c + 1] + grid[r + 2][c + 1];
        if c1 != 15 {
            return false;
        }
        let c2 = grid[r][c + 2] + grid[r + 1][c + 2] + grid[r + 2][c + 2];
        if c2 != 15 {
            return false;
        }
        let d0 = grid[r][c] + grid[r + 1][c + 1] + grid[r + 2][c + 2];
        if d0 != 15 {
            return false;
        }
        let d1 = grid[r][c + 2] + grid[r + 1][c + 1] + grid[r + 2][c];
        if d1 != 15 {
            return false;
        }
        true
    }
    fn num_magic_squares_inside(grid: Vec<Vec<i32>>) -> i32 {
        let n = grid.len();
        let m = grid[0].len();
        if n < 3 || m < 3 {
            return 0;
        }
        let mut sum = 0;
        for i in 0..=(n - 3) {
            for j in 0..=(m - 3) {
                if Self::is_magic(&grid, i, j) {
                    sum += 1;
                }
            }
        }
        sum
    }
}

#[test]
fn test() {
    let grid: Vec<Vec<i32>> = vec_vec_i32![[4, 3, 8, 4], [9, 5, 1, 9], [2, 7, 6, 2]];
    assert_eq!(Solution::num_magic_squares_inside(grid), 1);
    let grid: Vec<Vec<i32>> = vec_vec_i32![[5, 5, 5], [5, 5, 5], [5, 5, 5]];
    assert_eq!(Solution::num_magic_squares_inside(grid), 0);
}