diff options
Diffstat (limited to 'challenge-196/roger-bell-west/rust/ch-2.rs')
| -rwxr-xr-x | challenge-196/roger-bell-west/rust/ch-2.rs | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/challenge-196/roger-bell-west/rust/ch-2.rs b/challenge-196/roger-bell-west/rust/ch-2.rs new file mode 100755 index 0000000000..6ebff610fc --- /dev/null +++ b/challenge-196/roger-bell-west/rust/ch-2.rs @@ -0,0 +1,39 @@ +#! /bin/sh +//usr/bin/env rustc --test $0 -o ${0}x && ./${0}x --nocapture; rm -f ${0}x ; exit + +#[test] +fn test_ex1() { + assert_eq!(rangelist(vec![1, 3, 4, 5, 7]), vec![vec![3, 5]]); +} + +#[test] +fn test_ex2() { + assert_eq!(rangelist(vec![1, 2, 3, 6, 7, 9]), vec![vec![1, 3], vec![6, 7]]); +} + +#[test] +fn test_ex3() { + assert_eq!( + rangelist(vec![0, 1, 2, 4, 5, 6, 8, 9]), + vec![vec![0, 2], vec![4, 6], vec![8, 9]] + ); +} + +fn rangelist(l: Vec<isize>) -> Vec<Vec<isize>> { + let mut o = Vec::new(); + let mut start = l[0]; + let mut prev = start; + for &v in l.iter().skip(1) { + if v != prev + 1 { + if prev > start { + o.push(vec![start, prev]); + } + start = v; + } + prev = v; + } + if prev > start { + o.push(vec![start, prev]); + } + o +} |
