Day 11 complete
This commit is contained in:
		
							parent
							
								
									f09ab515bb
								
							
						
					
					
						commit
						31cdd8b327
					
				
							
								
								
									
										86
									
								
								src/11part1.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								src/11part1.rs
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,86 @@ | ||||||
|  | use std::fs; | ||||||
|  | 
 | ||||||
|  | #[derive(Eq, PartialEq, Hash, Copy, Clone, Debug)] | ||||||
|  | struct Coordinate { | ||||||
|  |     x: usize, | ||||||
|  |     y: usize, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | fn main() { | ||||||
|  |     let file_path = "input/11input.txt"; | ||||||
|  |     let contents = fs::read_to_string(file_path).expect("should read file"); | ||||||
|  |     let mut lines = contents.lines(); | ||||||
|  |     let mut matrix: Vec<Vec<char>> = Vec::new(); | ||||||
|  |     loop { | ||||||
|  |         match lines.next() { | ||||||
|  |             Some(line) => { | ||||||
|  |                 matrix.push(line.chars().collect()); | ||||||
|  |             }, | ||||||
|  |             None => break, | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     let mut matrix_expanded: Vec<Vec<char>> = Vec::new(); | ||||||
|  |     let mut matrix_expanded_full: Vec<Vec<char>> = Vec::new(); | ||||||
|  |     for y in 0..matrix.len() { | ||||||
|  |         let mut has_galaxy = false; | ||||||
|  |         for x in 0..matrix[y].len() { | ||||||
|  |             has_galaxy = has_galaxy || matrix[y][x] == '#'; | ||||||
|  |         } | ||||||
|  |         if !has_galaxy { | ||||||
|  |             matrix_expanded.push(matrix[y].to_owned()); | ||||||
|  |             matrix_expanded.push(matrix[y].to_owned()); | ||||||
|  |             matrix_expanded_full.push(Vec::new()); | ||||||
|  |             matrix_expanded_full.push(Vec::new()); | ||||||
|  |         } else { | ||||||
|  |             matrix_expanded.push(matrix[y].to_owned()); | ||||||
|  |             matrix_expanded_full.push(Vec::new()); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     for x in 0..matrix_expanded[0].len() { | ||||||
|  |         let mut has_galaxy = false; | ||||||
|  |         for y in 0..matrix_expanded.len() { | ||||||
|  |             has_galaxy = has_galaxy || matrix_expanded[y][x] == '#'; | ||||||
|  |         } | ||||||
|  |         if has_galaxy { | ||||||
|  |             for y in 0..matrix_expanded.len() { | ||||||
|  |                 matrix_expanded_full[0].push(matrix_expanded[y][x]); | ||||||
|  |                 matrix_expanded_full.push(matrix_expanded_full[0].to_owned()); | ||||||
|  |                 matrix_expanded_full.remove(0); | ||||||
|  |             } | ||||||
|  |         } else { | ||||||
|  |             for _y in 0..matrix_expanded.len() { | ||||||
|  |                 matrix_expanded_full[0].push('.'); | ||||||
|  |                 matrix_expanded_full[0].push('.'); | ||||||
|  |                 matrix_expanded_full.push(matrix_expanded_full[0].to_owned()); | ||||||
|  |                 matrix_expanded_full.remove(0); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     let mut coordinates = Vec::new(); | ||||||
|  |     for y in 0..matrix_expanded_full.len() { | ||||||
|  |         for x in 0..matrix_expanded_full[y].len() { | ||||||
|  |             if matrix_expanded_full[y][x] == '#' { | ||||||
|  |                 coordinates.push(Coordinate{x, y}); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     let mut sum = 0; | ||||||
|  |     for a in 0..coordinates.len()-1 { | ||||||
|  |         for b in a+1..coordinates.len() { | ||||||
|  |             if coordinates[a].x > coordinates[b].x { | ||||||
|  |                 if coordinates[a].y > coordinates[b].y { | ||||||
|  |                     sum += coordinates[a].x - coordinates[b].x + coordinates[a].y - coordinates[b].y; | ||||||
|  |                 } else { | ||||||
|  |                     sum += coordinates[a].x - coordinates[b].x + coordinates[b].y - coordinates[a].y; | ||||||
|  |                 } | ||||||
|  |             } else { | ||||||
|  |                 if coordinates[a].y > coordinates[b].y { | ||||||
|  |                     sum += coordinates[b].x - coordinates[a].x + coordinates[a].y - coordinates[b].y; | ||||||
|  |                 } else { | ||||||
|  |                     sum += coordinates[b].x - coordinates[a].x + coordinates[b].y - coordinates[a].y; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     println!("{}", sum); | ||||||
|  | } | ||||||
							
								
								
									
										77
									
								
								src/11part2.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								src/11part2.rs
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,77 @@ | ||||||
|  | use std::fs; | ||||||
|  | 
 | ||||||
|  | #[derive(Eq, PartialEq, Hash, Copy, Clone, Debug)] | ||||||
|  | struct Coordinate { | ||||||
|  |     x: usize, | ||||||
|  |     y: usize, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | fn main() { | ||||||
|  |     let file_path = "input/11input.txt"; | ||||||
|  |     let contents = fs::read_to_string(file_path).expect("should read file"); | ||||||
|  |     let mut lines = contents.lines(); | ||||||
|  |     let mut matrix: Vec<Vec<char>> = Vec::new(); | ||||||
|  |     loop { | ||||||
|  |         match lines.next() { | ||||||
|  |             Some(line) => { | ||||||
|  |                 matrix.push(line.chars().collect()); | ||||||
|  |             }, | ||||||
|  |             None => break, | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     let mut coordinates = Vec::new(); | ||||||
|  |     let mut coordinates_copy = Vec::new(); | ||||||
|  |     for y in 0..matrix.len() { | ||||||
|  |         for x in 0..matrix[y].len() { | ||||||
|  |             if matrix[y][x] == '#' { | ||||||
|  |                 coordinates.push(Coordinate{x, y}); | ||||||
|  |                 coordinates_copy.push(Coordinate{x, y}); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     for y in 0..matrix.len() { | ||||||
|  |         let mut has_galaxy = false; | ||||||
|  |         for x in 0..matrix[y].len() { | ||||||
|  |             has_galaxy = has_galaxy || matrix[y][x] == '#'; | ||||||
|  |         } | ||||||
|  |         if !has_galaxy { | ||||||
|  |             for c in 0..coordinates.len() { | ||||||
|  |                 if coordinates[c].y > y { | ||||||
|  |                     coordinates_copy[c].y += 999999; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     for x in 0..matrix[0].len() { | ||||||
|  |         let mut has_galaxy = false; | ||||||
|  |         for y in 0..matrix.len() { | ||||||
|  |             has_galaxy = has_galaxy || matrix[y][x] == '#'; | ||||||
|  |         } | ||||||
|  |         if !has_galaxy { | ||||||
|  |             for c in 0..coordinates.len() { | ||||||
|  |                 if coordinates[c].x > x { | ||||||
|  |                     coordinates_copy[c].x += 999999; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     let mut sum = 0; | ||||||
|  |     for a in 0..coordinates_copy.len()-1 { | ||||||
|  |         for b in a+1..coordinates_copy.len() { | ||||||
|  |             if coordinates_copy[a].x > coordinates_copy[b].x { | ||||||
|  |                 if coordinates_copy[a].y > coordinates_copy[b].y { | ||||||
|  |                     sum += coordinates_copy[a].x - coordinates_copy[b].x + coordinates_copy[a].y - coordinates_copy[b].y; | ||||||
|  |                 } else { | ||||||
|  |                     sum += coordinates_copy[a].x - coordinates_copy[b].x + coordinates_copy[b].y - coordinates_copy[a].y; | ||||||
|  |                 } | ||||||
|  |             } else { | ||||||
|  |                 if coordinates_copy[a].y > coordinates_copy[b].y { | ||||||
|  |                     sum += coordinates_copy[b].x - coordinates_copy[a].x + coordinates_copy[a].y - coordinates_copy[b].y; | ||||||
|  |                 } else { | ||||||
|  |                     sum += coordinates_copy[b].x - coordinates_copy[a].x + coordinates_copy[b].y - coordinates_copy[a].y; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     println!("{}", sum); | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user