day7: remember to use some convenience functions from my grid
This commit is contained in:
16
src/day7.rs
16
src/day7.rs
@@ -1,5 +1,5 @@
|
||||
use aoc_runner_derive::{aoc, aoc_generator};
|
||||
use grid::{AsCoord2d, Grid};
|
||||
use grid::{Coord2d, Grid};
|
||||
use itertools::Itertools;
|
||||
use std::str::FromStr;
|
||||
|
||||
@@ -8,13 +8,11 @@ fn parse(input: &str) -> Grid<u8> {
|
||||
Grid::from_str(input).unwrap()
|
||||
}
|
||||
|
||||
fn emit_beams(grid: &mut Grid<u8>, pos: impl AsCoord2d) -> u64 {
|
||||
fn emit_beams(grid: &mut Grid<u8>, pos: Coord2d) -> u64 {
|
||||
match grid.set(&pos, b'|') {
|
||||
None | Some(b'|') => 0,
|
||||
Some(b'.') | Some(b'S') => emit_beams(grid, (pos.x(), pos.y() + 1)),
|
||||
Some(b'^') => {
|
||||
1 + emit_beams(grid, (pos.x() - 1, pos.y())) + emit_beams(grid, (pos.x() + 1, pos.y()))
|
||||
}
|
||||
Some(b'.') | Some(b'S') => emit_beams(grid, pos + &(0, 1)),
|
||||
Some(b'^') => 1 + emit_beams(grid, pos + &(-1, 0)) + emit_beams(grid, pos + &(1, 0)),
|
||||
_ => panic!(),
|
||||
}
|
||||
}
|
||||
@@ -39,12 +37,12 @@ fn part2(input: &Grid<u8>) -> u64 {
|
||||
None => panic!("How did we end up outside the grid?"),
|
||||
// if our current position is a caret, add that count to our neighbours
|
||||
Some(b'^') => {
|
||||
grid.set(&(x - 1, y), grid.get(&(x - 1, y)).unwrap() + n);
|
||||
grid.set(&(x + 1, y), grid.get(&(x + 1, y)).unwrap() + n);
|
||||
grid.increment(&(x - 1, y), n);
|
||||
grid.increment(&(x + 1, y), n);
|
||||
}
|
||||
// if our current position is a . add that count here
|
||||
Some(b'.') => {
|
||||
grid.set(&(x, y), grid.get(&(x, y)).unwrap() + n);
|
||||
grid.increment(&(x, y), n);
|
||||
}
|
||||
_ => panic!(),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user