From 6e99a71fdeea9c48ff4f611ec3f1e3e0aa5cb664 Mon Sep 17 00:00:00 2001 From: Niko Abeler Date: Fri, 25 Nov 2022 20:11:55 +0100 Subject: [PATCH] slightly better chunks --- src/utils.rs | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/utils.rs b/src/utils.rs index 7be8f55..41a186d 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -3,11 +3,18 @@ use std::ops::Range; pub fn gen_chunks(n: usize, chunks: usize) -> Vec> { let mut borders = vec![]; let chunk_size = n / chunks; + let mut remainder = n % chunks; let mut start = 0; for _ in 0..chunks { let end = start + chunk_size; - borders.push(start..end); - start = end; + if remainder > 0 { + remainder -= 1; + borders.push(start..end + 1); + start = end + 1; + } else { + borders.push(start..end); + start = end; + } } // Change the last chunk to include the remainder let size = borders.len(); @@ -22,7 +29,7 @@ mod test { #[test] fn test_gen_chunks() { let borders = gen_chunks(10, 3); - assert_eq!(borders, vec![(0..3), (3..6), (6..10)]); + assert_eq!(borders, vec![(0..4), (4..7), (7..10)]); } #[test] @@ -36,4 +43,10 @@ mod test { let borders = gen_chunks(10, 1); assert_eq!(borders, vec![(0..10)]); } + + #[test] + fn test_gen_chunks4() { + let borders = gen_chunks(11, 3); + assert_eq!(borders, vec![(0..4), (4..8), (8..11)]); + } }