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