rustgym 0.2.0

rustgym solutions
Documentation
struct Solution;

impl Solution {
    fn champagne_tower(poured: i32, query_row: i32, query_glass: i32) -> f64 {
        let query_row = query_row as usize;
        let query_glass = query_glass as usize;
        let mut a: Vec<Vec<f64>> = vec![vec![0.0; 101]; 101];
        a[0][0] = poured as f64;
        for i in 0..99 {
            for j in 0..=i {
                if a[i][j] > 1.0 {
                    let overflow = a[i][j] - 1.0;
                    a[i + 1][j] += 0.5 * overflow;
                    a[i + 1][j + 1] += 0.5 * overflow;
                    a[i][j] = 1.0;
                }
            }
        }
        a[query_row as usize][query_glass as usize]
    }
}

#[test]
fn test() {
    use assert_approx_eq::assert_approx_eq;
    let poured = 1;
    let query_glass = 1;
    let query_row = 1;
    let res = 0.0;
    assert_approx_eq!(
        Solution::champagne_tower(poured, query_row, query_glass),
        res
    );
    let poured = 2;
    let query_glass = 1;
    let query_row = 1;
    let res = 0.5;
    assert_approx_eq!(
        Solution::champagne_tower(poured, query_row, query_glass),
        res
    );
    let poured = 0;
    let query_glass = 2;
    let query_row = 0;
    let res = 0.0;
    assert_approx_eq!(
        Solution::champagne_tower(poured, query_row, query_glass),
        res
    );
    let poured = 1;
    let query_glass = 0;
    let query_row = 0;
    let res = 1.0;
    assert_approx_eq!(
        Solution::champagne_tower(poured, query_row, query_glass),
        res
    );
    let poured = 1_000_000_000;
    let query_glass = 99;
    let query_row = 99;
    let res = 0.0;
    assert_approx_eq!(
        Solution::champagne_tower(poured, query_row, query_glass),
        res
    );
}