Compare commits
	
		
			3 Commits
		
	
	
		
			9a6ca66059
			...
			1c254fff93
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						
						
							
						
						1c254fff93
	
				 | 
					
					
						|||
| 
						
						
							
						
						44108c4b35
	
				 | 
					
					
						|||
| 
						
						
							
						
						b588837624
	
				 | 
					
					
						
							
								
								
									
										14
									
								
								src/day18.rs
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								src/day18.rs
									
									
									
									
									
								
							@@ -51,10 +51,12 @@ impl MemoryMap {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        Self { map, byte_stream }
 | 
					        Self { map, byte_stream }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    fn place_byte(&mut self, i: usize) {
 | 
					    // Return if the byte caused a new blockage or not
 | 
				
			||||||
 | 
					    fn place_byte(&mut self, i: usize) -> bool {
 | 
				
			||||||
        let pos = self.byte_stream[i];
 | 
					        let pos = self.byte_stream[i];
 | 
				
			||||||
        if self.map.set(&pos, false).is_none() {
 | 
					        match self.map.set(&pos, false) {
 | 
				
			||||||
            panic!("corruption outside memory bounds");
 | 
					            None => panic!("corruption outside memory bounds"),
 | 
				
			||||||
 | 
					            Some(x) => x,
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    fn place_bytes(&mut self, n: usize) {
 | 
					    fn place_bytes(&mut self, n: usize) {
 | 
				
			||||||
@@ -126,11 +128,10 @@ pub fn part2_impl(input: &str, width: usize, height: usize, n: usize) -> (i64, i
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    input_map.place_bytes(n);
 | 
					    input_map.place_bytes(n);
 | 
				
			||||||
    let mut path = input_map.dijkstra::<Vec<(i64, i64)>>((0, 0)).expect("no path found");
 | 
					    let mut path = input_map.dijkstra::<Vec<(i64, i64)>>((0, 0)).expect("no path found");
 | 
				
			||||||
    println!("{:?}", path);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for byte in n..input_map.byte_stream.len() {
 | 
					    for byte in n..input_map.byte_stream.len() {
 | 
				
			||||||
        input_map.place_byte(byte);
 | 
					        if input_map.place_byte(byte) {
 | 
				
			||||||
 | 
					            // If it's a new blockage, and it obstructs our best path, we need to do a new path search
 | 
				
			||||||
            if let Some((obs_at, _)) = path.iter().find_position(|v| *v == &input_map.byte_stream[byte]) {
 | 
					            if let Some((obs_at, _)) = path.iter().find_position(|v| *v == &input_map.byte_stream[byte]) {
 | 
				
			||||||
                let (before, _) = path.split_at(obs_at);
 | 
					                let (before, _) = path.split_at(obs_at);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -141,6 +142,7 @@ pub fn part2_impl(input: &str, width: usize, height: usize, n: usize) -> (i64, i
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    panic!("no bytes block route");
 | 
					    panic!("no bytes block route");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user