rustgym 0.2.0

rustgym solutions
Documentation
struct Solution;

impl Solution {
    fn surface_area(grid: Vec<Vec<i32>>) -> i32 {
        let n = grid.len();
        let mut res = 0;
        for i in 0..n {
            for j in 0..n {
                if grid[i][j] > 0 {
                    res += 2 + 4 * grid[i][j];
                }
            }
        }
        for i in 0..n {
            for j in 0..n {
                if i > 0 {
                    res -= 2 * i32::min(grid[i][j], grid[i - 1][j]);
                }
                if j > 0 {
                    res -= 2 * i32::min(grid[i][j], grid[i][j - 1]);
                }
            }
        }
        res
    }
}

#[test]
fn test() {
    let grid: Vec<Vec<i32>> = vec_vec_i32![[2]];
    assert_eq!(Solution::surface_area(grid), 10);
    let grid: Vec<Vec<i32>> = vec_vec_i32![[1, 2], [3, 4]];
    assert_eq!(Solution::surface_area(grid), 34);
    let grid: Vec<Vec<i32>> = vec_vec_i32![[1, 0], [0, 2]];
    assert_eq!(Solution::surface_area(grid), 16);
    let grid: Vec<Vec<i32>> = vec_vec_i32![[1, 1, 1], [1, 0, 1], [1, 1, 1]];
    assert_eq!(Solution::surface_area(grid), 32);
    let grid: Vec<Vec<i32>> = vec_vec_i32![[2, 2, 2], [2, 1, 2], [2, 2, 2]];
    assert_eq!(Solution::surface_area(grid), 46);
}