From be8f97d4f14088cb207a796b4aa80e8958bb9479 Mon Sep 17 00:00:00 2001 From: Simon Gardling Date: Mon, 27 Jan 2025 22:19:35 -0500 Subject: [PATCH] improve split_from --- src/misc.rs | 16 +++++----------- src/repr.rs | 6 +++--- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/src/misc.rs b/src/misc.rs index 1ffb2d5..ed7c476 100644 --- a/src/misc.rs +++ b/src/misc.rs @@ -1,16 +1,10 @@ -pub fn split(min: usize, max: usize, x: usize) -> Vec> { +pub fn split_from(min: usize, max: usize, x: usize) -> Vec> { if min > x || x > max { return Vec::new(); } - let index = x - min; - - let collected = (min..=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] + let x_lower = x.checked_sub(1).unwrap_or(min); + let x_upper = (x + 1).min(max); + vec![(min..=x_lower).rev().collect(), (x_upper..=max).collect()] } #[cfg(test)] @@ -19,6 +13,6 @@ mod test { #[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]]); } } diff --git a/src/repr.rs b/src/repr.rs index 6e1085a..3cad575 100644 --- a/src/repr.rs +++ b/src/repr.rs @@ -1,6 +1,6 @@ use std::fmt; -use crate::misc::split; +use crate::misc::split_from; #[derive(Copy, Clone, PartialEq, Eq, Debug)] pub enum Piece { @@ -80,12 +80,12 @@ impl Board { return; }; - let mut chains: Vec> = split(0, BOARD_SIZE - 1, i) + let mut chains: Vec> = split_from(0, BOARD_SIZE - 1, i) .into_iter() .map(|range| range.into_iter().map(|i| (i, j)).collect()) .collect(); chains.append( - &mut split(0, BOARD_SIZE - 1, j) + &mut split_from(0, BOARD_SIZE - 1, j) .into_iter() .map(|range| range.into_iter().map(|j| (i, j)).collect()) .collect::>>(),