rustgym 0.2.0

rustgym solutions
Documentation
struct Solution;
use std::iter::FromIterator;

trait Nums {
    fn nums(self) -> Vec<String>;
}

impl Nums for &[char] {
    fn nums(self) -> Vec<String> {
        let n = self.len();
        let mut res = vec![];
        for i in 1..=n {
            let left = String::from_iter(self[..i].iter());
            let right = String::from_iter(self[i..].iter());
            if left.starts_with('0') && left != "0" {
                continue;
            }
            if right.ends_with('0') {
                continue;
            }
            res.push(format!(
                "{}{}{}",
                left,
                if i == n { "" } else { "." },
                right
            ));
        }
        res
    }
}

impl Solution {
    fn ambiguous_coordinates(s: String) -> Vec<String> {
        let s: Vec<char> = s.chars().collect();
        let n = s.len();
        let mut res = vec![];
        for i in 2..n - 1 {
            let left = &s[1..i];
            let right = &s[i..n - 1];
            for l in left.nums() {
                for r in right.nums() {
                    res.push(format!("({}, {})", l, r));
                }
            }
        }
        res
    }
}

#[test]
fn test() {
    let s = "(123)".to_string();
    let mut res = vec_string!["(1, 23)", "(12, 3)", "(1.2, 3)", "(1, 2.3)"];
    let mut ans = Solution::ambiguous_coordinates(s);
    res.sort();
    ans.sort();
    assert_eq!(ans, res);
    let s = "(00011)".to_string();
    let mut res = vec_string!["(0.001, 1)", "(0, 0.011)"];
    let mut ans = Solution::ambiguous_coordinates(s);
    res.sort();
    ans.sort();
    assert_eq!(ans, res);
    let s = "(0123)".to_string();
    let mut res = vec_string![
        "(0, 123)",
        "(0, 12.3)",
        "(0, 1.23)",
        "(0.1, 23)",
        "(0.1, 2.3)",
        "(0.12, 3)"
    ];
    let mut ans = Solution::ambiguous_coordinates(s);
    res.sort();
    ans.sort();
    assert_eq!(ans, res);
    let s = "(100)".to_string();
    let mut res = vec_string!["(10, 0)"];
    let mut ans = Solution::ambiguous_coordinates(s);
    res.sort();
    ans.sort();
    assert_eq!(ans, res);
}