let mut beam: Vec<(usize, usize)> = Vec::new();
beam.push((self.start.0 + 1, self.start.1));
while let Some(pos) = beam.pop() {
- if self.map.contains_key(&pos) {
- let location = self.map.get_mut(&pos).unwrap();
+ if let Some(location) = self.map.get_mut(&pos) {
if location.1 {
continue;
}
beams_pos.iter()
.for_each(|pos| {
let timeline = *beams_timelines.get(pos).unwrap();
- let next_pos = (pos.0 + 1, pos.1);
- if self.map.contains_key(&next_pos) {
- let next_char = self.map.get_mut(&next_pos).unwrap().0; // it exists
- let next_pos = match next_char {
+ if let Some(next) = self.map.get_mut(&(pos.0 + 1, pos.1)) {
+ let next_pos = match next.0 {
'.' => vec![(pos.0 + 1, pos.1)],
'^' => vec![(pos.0 + 1, pos.1 - 1), (pos.0 + 1, pos.1 + 1)],
_ => unreachable!(),