rustgym 0.2.0

rustgym solutions
Documentation
struct Solution;
use std::collections::VecDeque;

impl Solution {
    fn can_measure_water(x: i32, y: i32, z: i32) -> bool {
        if z > x + y {
            return false;
        }
        if z == x || z == y || z == x + y {
            return true;
        }
        let mut visited = vec![false; (x + y) as usize];

        let mut queue: VecDeque<i32> = VecDeque::new();
        queue.push_back(0);
        while let Some(front) = queue.pop_front() {
            for diff in [x, y, -x, -y].iter() {
                let next = front + diff;
                if next == z {
                    return true;
                } else {
                    if next < x + y && next > 0 && !visited[next as usize] {
                        visited[next as usize] = true;
                        queue.push_back(next);
                    }
                }
            }
        }
        false
    }
}

#[test]
fn test() {
    let x = 3;
    let y = 5;
    let z = 4;
    let res = true;
    assert_eq!(Solution::can_measure_water(x, y, z), res);
    let x = 2;
    let y = 6;
    let z = 5;
    let res = false;
    assert_eq!(Solution::can_measure_water(x, y, z), res);
}