let mut end = (-1, -1);
input.lines().enumerate()
.for_each(|(row, line)| {
- line.as_bytes().into_iter().enumerate()
+ line.as_bytes().iter().enumerate()
.for_each(|(col, &value)| {
let (row, col) = (row as isize, col as isize);
match value {
.filter(|d| *d != dir_opp)
.filter(|d| self.map.contains_key(&(pos.0 + d.0, pos.1 + d.1)))
.for_each(|dir| {
- let pos_new = (pos.0 + dir.0, pos.1 + dir.1);
- if self.map.contains_key(&pos_new) {
- let tile_new = score.get_mut(&pos_new).unwrap();
- let mut score_new = score_curr + 1;
+ let pos_next = (pos.0 + dir.0, pos.1 + dir.1);
+ if self.map.contains_key(&pos_next) {
+ let mut score_next = score_curr + 1;
if dir != dir_curr {
- score_new += 1000;
+ score_next += 1000;
}
- if tile_new.score == INFINITE_SCORE || score_new < tile_new.score {
- tile_new.score = score_new;
- tile_new.dir = dir;
- next.push(pos_new);
+ let tile_next = score.get_mut(&pos_next).unwrap();
+ if score_next < tile_next.score {
+ tile_next.score = score_next;
+ tile_next.dir = dir;
+ next.push(pos_next);
}
}
});
//println!(" next={:?}", next);
}
- (*score.get(&self.end).unwrap()).score
+ score.get(&self.end).unwrap().score
}
}
#S...................#.............................#
####################################################";
-
#[test]
fn test_part1() {
assert_eq!(7036, run_part1(TEXT_INPUT_0).unwrap());