rustgym 0.2.0

rustgym solutions
Documentation
#![allow(clippy::unreadable_literal)]
struct Solution;
use std::collections::HashMap;

impl Solution {
    fn max_number_of_families(n: i32, reserved_seats: Vec<Vec<i32>>) -> i32 {
        let n = n as usize;
        let mut hm: HashMap<usize, u16> = HashMap::new();
        for seat in reserved_seats {
            let i = (seat[0] - 1) as usize;
            let j = (seat[1] - 1) as usize;
            *hm.entry(i).or_default() |= 1 << j;
        }
        let mut res = 0;
        for &row_bitset in hm.values() {
            res += Self::num_of_families(row_bitset);
        }
        res += (n - hm.len()) * 2;
        res as i32
    }

    fn num_of_families(row_bitset: u16) -> usize {
        let two = 0b0111111110;
        let mid = 0b0001111000;
        let left = 0b0111100000;
        let right = 0b0000011110;
        if row_bitset & two == 0 {
            2
        } else {
            if row_bitset & mid == 0 {
                1
            } else {
                if row_bitset & left == 0 || row_bitset & right == 0 {
                    1
                } else {
                    0
                }
            }
        }
    }
}

#[test]
fn test() {
    let n = 3;
    let reserved_seats = vec_vec_i32![[1, 2], [1, 3], [1, 8], [2, 6], [3, 1], [3, 10]];
    let res = 4;
    assert_eq!(Solution::max_number_of_families(n, reserved_seats), res);
    let n = 2;
    let reserved_seats = vec_vec_i32![[2, 1], [1, 8], [2, 6]];
    let res = 2;
    assert_eq!(Solution::max_number_of_families(n, reserved_seats), res);
    let n = 4;
    let reserved_seats = vec_vec_i32![[4, 3], [1, 4], [4, 6], [1, 7]];
    let res = 4;
    assert_eq!(Solution::max_number_of_families(n, reserved_seats), res);
}