rustgym 0.2.0

rustgym solutions
Documentation
struct Solution;

use std::collections::HashMap;

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

    fn dp(n: i32, memo: &mut HashMap<i32, i32>) -> i32 {
        if n <= 1 {
            n
        } else {
            if let Some(&res) = memo.get(&n) {
                return res;
            }
            let res = 1 + (n % 2 + Self::dp(n / 2, memo)).min(n % 3 + Self::dp(n / 3, memo));
            memo.insert(n, res);
            res
        }
    }
}

#[test]
fn test() {
    let n = 10;
    let res = 4;
    assert_eq!(Solution::min_days(n), res);
    let n = 6;
    let res = 3;
    assert_eq!(Solution::min_days(n), res);
    let n = 1;
    let res = 1;
    assert_eq!(Solution::min_days(n), res);
    let n = 56;
    let res = 6;
    assert_eq!(Solution::min_days(n), res);
    let n = 9209408;
    let res = 23;
    assert_eq!(Solution::min_days(n), res);
    let n = 84806671;
    let res = 32;
    assert_eq!(Solution::min_days(n), res);
}