diff options
author | mhsn <mail@mhsn.net> | 2025-06-02 16:08:46 +0000 |
---|---|---|
committer | mhsn <mail@mhsn.net> | 2025-06-02 16:08:46 +0000 |
commit | e23157ccf9f9ca4f03825c6fe60405c4404ee82d (patch) | |
tree | 7e60d8bb6c0674af42a9669c10ffa7cf3bcbf420 /lib/rust/src/lib.rs | |
parent | 91a0ba214d07b7ee272dc179f997240a3ca1f1c2 (diff) | |
download | aoc-e23157ccf9f9ca4f03825c6fe60405c4404ee82d.tar.gz aoc-e23157ccf9f9ca4f03825c6fe60405c4404ee82d.zip |
rust lib: add points iter
Diffstat (limited to 'lib/rust/src/lib.rs')
-rw-r--r-- | lib/rust/src/lib.rs | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/lib/rust/src/lib.rs b/lib/rust/src/lib.rs index 25c82db..bfeaee4 100644 --- a/lib/rust/src/lib.rs +++ b/lib/rust/src/lib.rs @@ -8,6 +8,11 @@ impl<T> Grid<T> { Grid { grid } } + pub fn points(&self) -> impl Iterator<Item = (usize, usize)> { + (0..self.grid.len()) + .flat_map(|y| (0..self.grid.first().unwrap_or(&Vec::new()).len()).map(move |x| (x, y))) + } + pub fn ray(&self, (x, y): (usize, usize), (dx, dy): (i64, i64)) -> impl Iterator<Item = &T> { let (x, y) = (i64::try_from(x).unwrap(), i64::try_from(y).unwrap()); (0..) @@ -23,6 +28,8 @@ impl<T> Grid<T> { #[cfg(test)] mod tests { + use std::collections::HashSet; + use super::*; #[test] @@ -31,6 +38,35 @@ mod tests { } #[test] + fn points_empty() { + let grid = Grid::<u64>::new(vec![vec![]]); + assert!(grid.points().eq(vec![])) + } + + #[test] + fn points_equal_size() { + let grid = Grid::new(vec![vec![1, 2], vec![3, 4]]); + let points = grid.points().collect::<HashSet<_>>(); + assert_eq!( + points, + [(0, 0), (0, 1), (1, 0), (1, 1)].iter().cloned().collect() + ) + } + + #[test] + fn points_unequal_size() { + let grid = Grid::new(vec![vec![1, 2], vec![3, 4], vec![5, 6]]); + let points = grid.points().collect::<HashSet<_>>(); + assert_eq!( + points, + [(0, 0), (1, 0), (0, 1), (1, 1), (0, 2), (1, 2)] + .iter() + .cloned() + .collect() + ) + } + + #[test] fn ray_empty() { let grid = Grid::<u64>::new(vec![vec![]]); assert!(grid.ray((1, 1), (1, 2)).eq(vec![].iter())) |