RosettaCodeData/Task/Range-expansion/Rust/range-expansion.rs

27 lines
848 B
Rust
Raw Permalink Normal View History

2023-07-01 11:58:00 -04:00
use std::str::FromStr;
// Precondition: range doesn't contain multibyte UTF-8 characters
fn range_expand(range : &str) -> Vec<i32> {
range.split(',').flat_map(|item| {
match i32::from_str(item) {
Ok(n) => n..n+1,
_ => {
let dashpos=
match item.rfind("--") {
Some(p) => p,
None => item.rfind('-').unwrap(),
};
let rstart=i32::from_str(
2026-04-30 12:34:36 -04:00
unsafe{ item.get_unchecked(0..dashpos)} ).unwrap();
2023-07-01 11:58:00 -04:00
let rend=i32::from_str(
2026-04-30 12:34:36 -04:00
unsafe{ item.get_unchecked((dashpos+1)..item.len()) } ).unwrap();
2023-07-01 11:58:00 -04:00
rstart..rend+1
},
}
}).collect()
}
fn main() {
println!("{:?}", range_expand("-6,-3--1,3-5,7-11,14,15,17-20"));
}