53 lines
1.2 KiB
Rust
53 lines
1.2 KiB
Rust
use std::ops::Range;
|
|
|
|
pub fn gen_chunks(n: usize, chunks: usize) -> Vec<Range<usize>> {
|
|
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;
|
|
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();
|
|
borders[size - 1].end = n;
|
|
borders
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod test {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn test_gen_chunks() {
|
|
let borders = gen_chunks(10, 3);
|
|
assert_eq!(borders, vec![(0..4), (4..7), (7..10)]);
|
|
}
|
|
|
|
#[test]
|
|
fn test_gen_chunks2() {
|
|
let borders = gen_chunks(10, 2);
|
|
assert_eq!(borders, vec![(0..5), (5..10)]);
|
|
}
|
|
|
|
#[test]
|
|
fn test_gen_chunks3() {
|
|
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)]);
|
|
}
|
|
}
|