rustgym 0.2.0

rustgym solutions
Documentation
struct Solution;

impl Solution {
    fn find_min_difference(time_points: Vec<String>) -> i32 {
        let n = time_points.len();
        const M: usize = 1440 as usize;
        if n > M {
            return 0;
        }
        let mut a = [false; M];
        for time_point in time_points {
            let t = Self::clock_to_minute(time_point);
            if a[t as usize] {
                return 0;
            } else {
                a[t as usize] = true;
            }
        }
        let mut first: Option<usize> = None;
        let mut last: Option<usize> = None;
        let mut prev: Option<usize> = None;
        let mut min = M;
        for i in 0..M {
            if a[i] {
                if first == None {
                    prev = Some(i);
                    first = Some(i);
                } else {
                    min = usize::min(min, i - prev.unwrap());
                    prev = Some(i);
                    last = Some(i);
                }
            }
        }
        min = usize::min(first.unwrap() + M - last.unwrap() as usize, min);
        min as i32
    }

    fn clock_to_minute(s: String) -> usize {
        let parts: Vec<usize> = s.split(':').map(|s| s.parse::<usize>().unwrap()).collect();
        parts[0] * 60 + parts[1]
    }
}

#[test]
fn test() {
    let time_points = vec_string!["23:59", "00:00"];
    assert_eq!(Solution::find_min_difference(time_points), 1);
}