rustgym 0.2.0

rustgym solutions
Documentation
struct Solution;

use std::collections::HashMap;

impl Solution {
    fn winner_square_game(n: i32) -> bool {
        let mut memo: HashMap<i32, bool> = HashMap::new();
        Self::dp(n, &mut memo)
    }

    fn dp(n: i32, memo: &mut HashMap<i32, bool>) -> bool {
        if let Some(&res) = memo.get(&n) {
            return res;
        }
        let x = Self::sqrt(n);
        let res = if x * x == n {
            true
        } else {
            let mut res = false;
            for i in 1..=x {
                let y = n - i * i;
                if !Self::dp(y, memo) {
                    res = true;
                    break;
                }
            }
            res
        };
        memo.insert(n, res);
        res
    }

    fn sqrt(x: i32) -> i32 {
        (x as f64).sqrt() as i32
    }
}

#[test]
fn test() {
    let n = 1;
    let res = true;
    assert_eq!(Solution::winner_square_game(n), res);
    let n = 2;
    let res = false;
    assert_eq!(Solution::winner_square_game(n), res);
    let n = 4;
    let res = true;
    assert_eq!(Solution::winner_square_game(n), res);
    let n = 7;
    let res = false;
    assert_eq!(Solution::winner_square_game(n), res);
    let n = 17;
    let res = false;
    assert_eq!(Solution::winner_square_game(n), res);
}