improve split_from
This commit is contained in:
parent
58b84fa3ac
commit
be8f97d4f1
16
src/misc.rs
16
src/misc.rs
@ -1,16 +1,10 @@
|
|||||||
pub fn split(min: usize, max: usize, x: usize) -> Vec<Vec<usize>> {
|
pub fn split_from(min: usize, max: usize, x: usize) -> Vec<Vec<usize>> {
|
||||||
if min > x || x > max {
|
if min > x || x > max {
|
||||||
return Vec::new();
|
return Vec::new();
|
||||||
}
|
}
|
||||||
let index = x - min;
|
let x_lower = x.checked_sub(1).unwrap_or(min);
|
||||||
|
let x_upper = (x + 1).min(max);
|
||||||
let collected = (min..=max).collect::<Vec<usize>>();
|
vec![(min..=x_lower).rev().collect(), (x_upper..=max).collect()]
|
||||||
let split = collected.split_at(index);
|
|
||||||
let mut one = split.0.to_vec();
|
|
||||||
one.reverse();
|
|
||||||
let mut two = split.1.to_vec();
|
|
||||||
two.remove(0);
|
|
||||||
vec![one, two]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
@ -19,6 +13,6 @@ mod test {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn split_test() {
|
fn split_test() {
|
||||||
assert_eq!(split(0, 6, 2), vec![vec![1, 0], vec![3, 4, 5, 6]]);
|
assert_eq!(split_from(0, 6, 2), vec![vec![1, 0], vec![3, 4, 5, 6]]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
|
||||||
use crate::misc::split;
|
use crate::misc::split_from;
|
||||||
|
|
||||||
#[derive(Copy, Clone, PartialEq, Eq, Debug)]
|
#[derive(Copy, Clone, PartialEq, Eq, Debug)]
|
||||||
pub enum Piece {
|
pub enum Piece {
|
||||||
@ -80,12 +80,12 @@ impl Board {
|
|||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut chains: Vec<Vec<(usize, usize)>> = split(0, BOARD_SIZE - 1, i)
|
let mut chains: Vec<Vec<(usize, usize)>> = split_from(0, BOARD_SIZE - 1, i)
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|range| range.into_iter().map(|i| (i, j)).collect())
|
.map(|range| range.into_iter().map(|i| (i, j)).collect())
|
||||||
.collect();
|
.collect();
|
||||||
chains.append(
|
chains.append(
|
||||||
&mut split(0, BOARD_SIZE - 1, j)
|
&mut split_from(0, BOARD_SIZE - 1, j)
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|range| range.into_iter().map(|j| (i, j)).collect())
|
.map(|range| range.into_iter().map(|j| (i, j)).collect())
|
||||||
.collect::<Vec<Vec<(usize, usize)>>>(),
|
.collect::<Vec<Vec<(usize, usize)>>>(),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user