rustgym 0.2.0

rustgym solutions
Documentation
struct Solution;

impl Solution {
    fn makesquare(mut nums: Vec<i32>) -> bool {
        let n = nums.len();
        if n == 0 {
            return false;
        }
        let sum: i32 = nums.iter().sum();
        if sum % 4 != 0 {
            return false;
        }
        nums.sort_unstable_by_key(|&x| -x);
        let mut sides = vec![0; 4];
        Self::dfs(0, &mut sides, &nums, sum / 4, n)
    }

    fn dfs(start: usize, sides: &mut Vec<i32>, nums: &[i32], sum: i32, n: usize) -> bool {
        if start == n {
            true
        } else {
            for i in 0..4 {
                if sides[i] + nums[start] > sum {
                    continue;
                }
                sides[i] += nums[start];
                if Self::dfs(start + 1, sides, nums, sum, n) {
                    return true;
                }
                sides[i] -= nums[start];
            }
            false
        }
    }
}

#[test]
fn test() {
    let nums = vec![1, 1, 2, 2, 2];
    let res = true;
    assert_eq!(Solution::makesquare(nums), res);
    let nums = vec![1, 1, 2, 2, 2];
    let res = true;
    assert_eq!(Solution::makesquare(nums), res);
    let nums = vec![5, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3];
    let res = true;
    assert_eq!(Solution::makesquare(nums), res);
}