pub fn rep_comb(list: &[usize]) -> Vec<(usize, usize)> {
let mut i = 0;
let mut s = 0;
list.iter().filter_map(|&p| {
let e = if p > s {
Some((i, p - s))
} else {
None
};
i += 1;
s = p + 1;
e
}).collect()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn sample() {
let a = rep_comb(&[1,5,7,10]);
assert_eq!(a, vec![(0,1), (1,3), (2,1), (3,2)]);
}
#[test]
fn empty() {
let a = rep_comb(&[]);
assert!(a.is_empty());
}
#[test]
fn only_walls() {
let a = rep_comb(&[0,1,2,3]);
assert!(a.is_empty());
}
#[test]
fn large_value() {
let a = rep_comb(&[usize::MAX-1]);
assert_eq!(a, vec![(0, usize::MAX-1)]);
}
}