diff options
Diffstat (limited to '2024_rust/src/lib.rs')
-rw-r--r-- | 2024_rust/src/lib.rs | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/2024_rust/src/lib.rs b/2024_rust/src/lib.rs index c034fea..ea6f7d6 100644 --- a/2024_rust/src/lib.rs +++ b/2024_rust/src/lib.rs @@ -1,5 +1,6 @@ pub mod matrix { pub type Pos = (usize, usize); + pub type PosDelta = (isize, isize); #[derive(Clone)] pub struct Matrix<T> { @@ -27,6 +28,18 @@ pub mod matrix { pub fn set(&mut self, (x, y): Pos, dot: T) { self.dots[x][y] = dot; } + + pub fn pos_move(&self, (x, y): Pos, (dx, dy): PosDelta) -> Option<Pos> { + let x2 = x as isize + dx; + if x2 < 0 || x2 >= self.limit.0 as isize { + return None; + } + let y2 = y as isize + dy; + if y2 < 0 || y2 >= self.limit.1 as isize { + return None; + } + Some((x2 as usize, y2 as usize)) + } } use std::fmt; |