othello/src/misc.rs

33 lines
817 B
Rust

pub fn split_from(min: usize, max: usize, x: usize) -> Vec<Vec<usize>> {
if min > x || x > max {
return Vec::new();
}
let x_lower = x.checked_sub(1).unwrap_or(min);
let x_upper = (x + 1).min(max);
let lower_range = if x_lower != min {
(min..=x_lower).rev().collect()
} else {
Vec::new()
};
let upper_range = if x_upper != max {
(x_upper..=max).collect()
} else {
Vec::new()
};
vec![lower_range, upper_range]
}
#[cfg(test)]
mod test {
use super::*;
#[test]
fn split_test() {
assert_eq!(split_from(0, 6, 2), vec![vec![1, 0], vec![3, 4, 5, 6]]);
assert_eq!(split_from(0, 6, 0), vec![vec![], vec![1, 2, 3, 4, 5, 6]]);
assert_eq!(split_from(0, 6, 6), vec![vec![5, 4, 3, 2, 1, 0], vec![]]);
}
}