rustgym 0.2.0

rustgym solutions
Documentation
struct Solution;
use std::fmt;

struct Range {
    start: i32,
    end: i32,
}

impl fmt::Display for Range {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        if self.start == self.end {
            write!(f, "{}", self.start)
        } else {
            write!(f, "{}->{}", self.start, self.end)
        }
    }
}

impl Solution {
    fn summary_ranges(nums: Vec<i32>) -> Vec<String> {
        let mut r: Option<Range> = None;
        let mut res: Vec<String> = vec![];
        for x in nums {
            if let Some(prev) = r {
                if prev.end + 1 == x {
                    r = Some(Range {
                        start: prev.start,
                        end: x,
                    });
                    continue;
                } else {
                    res.push(format!("{}", prev));
                    r = Some(Range { start: x, end: x });
                }
            } else {
                r = Some(Range { start: x, end: x })
            }
        }
        if let Some(last) = r {
            res.push(format!("{}", last));
        }
        res
    }
}

#[test]
fn test() {
    let nums = vec![0, 1, 2, 4, 5, 7];
    let res: Vec<String> = vec_string!["0->2", "4->5", "7"];
    assert_eq!(Solution::summary_ranges(nums), res);
}