diff --git a/2020/src/grid.rs b/2020/src/grid.rs index 621eb8a..347029b 100644 --- a/2020/src/grid.rs +++ b/2020/src/grid.rs @@ -61,9 +61,22 @@ pub fn draw_ascii(coordinates: &HashMap PositionND { impl Mul for PositionND { type Output = PositionND; - fn mul(self, rhs: i64) -> Self::Output { - let mut points = [0; D]; - for i in 0..D { - points[i] = self.points[i] * rhs; + fn mul(mut self, rhs: i64) -> Self::Output { + for p in self.points.iter_mut() { + *p *= rhs; } - PositionND { points } + self } } impl Add> for PositionND { type Output = PositionND; - fn add(self, rhs: PositionND) -> Self::Output { - let mut points = [0; D]; - for i in 0..D { - points[i] = self.points[i] + rhs.points[i]; + fn add(mut self, rhs: PositionND) -> Self::Output { + for (x, y) in self.points.iter_mut().zip(rhs.points) { + *x += y; } - PositionND { points } + self } } impl Sub> for PositionND { type Output = PositionND; - fn sub(self, rhs: PositionND) -> Self::Output { - let mut points = [0; D]; - for i in 0..D { - points[i] = self.points[i] - rhs.points[i]; + fn sub(mut self, rhs: PositionND) -> Self::Output { + for (x, y) in self.points.iter_mut().zip(rhs.points) { + *x -= y; } - PositionND { points } + self } }