Extract common method Vec2::max
This commit is contained in:
		
							parent
							
								
									c6c6a234c0
								
							
						
					
					
						commit
						82e0348158
					
				
					 3 changed files with 22 additions and 12 deletions
				
			
		| 
						 | 
					@ -67,10 +67,7 @@ impl Maze {
 | 
				
			||||||
    /// Count the number of tiles inside the polygon described by the pipe loop
 | 
					    /// Count the number of tiles inside the polygon described by the pipe loop
 | 
				
			||||||
    /// using the [winding number algorithm](https://en.wikipedia.org/wiki/Point_in_polygon#Winding_number_algorithm).
 | 
					    /// using the [winding number algorithm](https://en.wikipedia.org/wiki/Point_in_polygon#Winding_number_algorithm).
 | 
				
			||||||
    fn count_empty_tiles_inside(&self) -> usize {
 | 
					    fn count_empty_tiles_inside(&self) -> usize {
 | 
				
			||||||
        let max_dimensions = self.tiles.keys().fold(Vec2::<i64>::default(), |a, b| Vec2 {
 | 
					        let max_dimensions = self.tiles.keys().copied().reduce(Vec2::max).unwrap();
 | 
				
			||||||
            x: a.x.max(b.x),
 | 
					 | 
				
			||||||
            y: a.y.max(b.y),
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
        let pipe_loop = self.pipe_loop();
 | 
					        let pipe_loop = self.pipe_loop();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let mut tiles_inside = 0;
 | 
					        let mut tiles_inside = 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,7 +31,7 @@ struct Universe {
 | 
				
			||||||
impl Universe {
 | 
					impl Universe {
 | 
				
			||||||
    fn expand(&mut self, factor: usize) {
 | 
					    fn expand(&mut self, factor: usize) {
 | 
				
			||||||
        let add = factor - 1;
 | 
					        let add = factor - 1;
 | 
				
			||||||
        let dimensions = self.dimensions();
 | 
					        let dimensions = self.galaxies.iter().copied().reduce(Vec2::max).unwrap();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Add additional columns
 | 
					        // Add additional columns
 | 
				
			||||||
        for x in (0..=dimensions.x).rev() {
 | 
					        for x in (0..=dimensions.x).rev() {
 | 
				
			||||||
| 
						 | 
					@ -60,13 +60,6 @@ impl Universe {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fn dimensions(&self) -> Galaxy {
 | 
					 | 
				
			||||||
        self.galaxies.iter().fold(Galaxy::default(), |a, b| Galaxy {
 | 
					 | 
				
			||||||
            x: a.x.max(b.x),
 | 
					 | 
				
			||||||
            y: a.y.max(b.y),
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    fn sum_of_distances(&self) -> usize {
 | 
					    fn sum_of_distances(&self) -> usize {
 | 
				
			||||||
        let pairs = self
 | 
					        let pairs = self
 | 
				
			||||||
            .galaxies
 | 
					            .galaxies
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										20
									
								
								src/lib.rs
									
										
									
									
									
								
							
							
						
						
									
										20
									
								
								src/lib.rs
									
										
									
									
									
								
							| 
						 | 
					@ -121,6 +121,26 @@ impl<T> Vec2<T> {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl<T> Vec2<T>
 | 
				
			||||||
 | 
					where
 | 
				
			||||||
 | 
					    T: Ord,
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /// Returns the component-wise maximum of this vector and the other.
 | 
				
			||||||
 | 
					    ///
 | 
				
			||||||
 | 
					    /// ```rust
 | 
				
			||||||
 | 
					    /// # use aoc2023::Vec2;
 | 
				
			||||||
 | 
					    /// let a = Vec2::new(1, 5);
 | 
				
			||||||
 | 
					    /// let b = Vec2::new(2, -5);
 | 
				
			||||||
 | 
					    /// assert_eq!(a.max(b), Vec2::new(2, 5));
 | 
				
			||||||
 | 
					    /// ```
 | 
				
			||||||
 | 
					    pub fn max(self, other: Self) -> Self {
 | 
				
			||||||
 | 
					        Self {
 | 
				
			||||||
 | 
					            x: self.x.max(other.x),
 | 
				
			||||||
 | 
					            y: self.y.max(other.y),
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<T> Add for Vec2<T>
 | 
					impl<T> Add for Vec2<T>
 | 
				
			||||||
where
 | 
					where
 | 
				
			||||||
    T: Add<Output = T>,
 | 
					    T: Add<Output = T>,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue