})
.sum()
}
+
+ fn rating(self: &Self, pos: (isize, isize), value: u8) -> u32 {
+ [(-1,0), (0,1), (1,0), (0,-1)].iter()
+ .map(|dij| (pos.0 + dij.0 as isize, pos.1 + dij.1 as isize))
+ .map(|new_pos| {
+ match self.map.get(&new_pos) {
+ Some(&value_next) => {
+ if value_next == value + 1 {
+ if value_next == b'9' {
+ 1
+ }
+ else {
+ self.rating(new_pos, value_next)
+ }
+ }
+ else {
+ 0
+ }
+ },
+ _ => { 0 }
+ }
+ })
+ .sum()
+ }
}
fn run_part1(input: &str) -> Result<u32, Box<dyn Error>> {
fn run_part2(input: &str) -> Result<u32, Box<dyn Error>> {
println!("Running {} - part 2", get_day());
- Ok(0)
+ let puzzle = Puzzle::new(input);
+ let res = puzzle.start_pos.iter()
+ .map(|pos| puzzle.rating(*pos, b'0'))
+ .sum();
+
+ Ok(res)
}
pub fn run(input: &str) -> Result<(), Box<dyn Error>> {
...8..3
...9..2
.....01";
+
static TEXT_INPUT: &str = "\
89010123
78121874
01329801
10456732";
+ static TEXT_INPUT_4: &str = "\
+.....0.
+..4321.
+..5..2.
+..6543.
+..7..4.
+..8765.
+..9....";
+ static TEXT_INPUT_5: &str = "\
+012345
+123456
+234567
+345678
+4.6789
+56789.";
+
#[test]
fn test_part1() {
assert_eq!(1, run_part1(TEXT_INPUT_0).unwrap());
#[test]
fn test_part2() {
- assert_eq!(0, run_part2(TEXT_INPUT).unwrap());
+ assert_eq!(3, run_part2(TEXT_INPUT_4).unwrap());
+ assert_eq!(13, run_part2(TEXT_INPUT_2).unwrap());
+ assert_eq!(227, run_part2(TEXT_INPUT_5).unwrap());
+ assert_eq!(81, run_part2(TEXT_INPUT).unwrap());
}
}