Skip to content

Commit d239fe3

Browse files
committed
solve: day10
1 parent 7b0f800 commit d239fe3

File tree

3 files changed

+80
-1
lines changed

3 files changed

+80
-1
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
resolver = "2"
33
members = [
44
"utils",
5-
"aoc_derive", "day1", "day2", "day3", "day4", "day5", "day6", "day7", "day8", "day9",
5+
"aoc_derive", "day1", "day2", "day3", "day4", "day5", "day6", "day7", "day8", "day9", "day10",
66
]
77

88
[workspace.dependencies]

day10/Cargo.toml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
[package]
2+
name = "day10"
3+
version = "0.1.0"
4+
edition = "2024"
5+
6+
[dependencies]
7+
aoc_derive.path = '../aoc_derive'
8+
utils.path = '../utils'
9+
derive_more.workspace = true
10+
itertools.workspace = true
11+
lazy-regex.workspace = true
12+
parse-display.workspace = true
13+
rayon.workspace = true
14+
regex.workspace = true
15+
num.workspace = true
16+
17+
[dev-dependencies]
18+
pretty_assertions.workspace = true

day10/src/main.rs

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
use aoc_derive::aoc_main;
2+
use grid::Grid;
3+
use itertools::Itertools;
4+
use math::Vec2D;
5+
use utils::*;
6+
7+
fn hiking_paths(pos: Vec2D, map: &Grid<usize>) -> Vec<Vec2D> {
8+
if map[pos] == 9 {
9+
return vec![pos];
10+
}
11+
12+
map.orthogonal_neighbors(&pos)
13+
.filter(|&neighbor| map[neighbor] == map[pos] + 1)
14+
.flat_map(|pos| hiking_paths(pos, map))
15+
.collect_vec()
16+
}
17+
18+
#[aoc_main]
19+
fn solve(input: Input) -> impl Into<Solution> {
20+
let map = input.number_grid();
21+
22+
map.iter().filter_map(|(pos, &val)| (val == 0).then_some(pos)).fold(
23+
(0, 0),
24+
|(part1, part2), trailhead| {
25+
let score = hiking_paths(trailhead, &map);
26+
(part1 + score.iter().unique().count(), part2 + score.len())
27+
},
28+
)
29+
}
30+
31+
#[cfg(test)]
32+
mod tests {
33+
use super::*;
34+
#[test]
35+
fn test_examples() {
36+
use utils::assert_example;
37+
assert_example!(
38+
r#"0123
39+
1234
40+
8765
41+
9876
42+
"#,
43+
1
44+
);
45+
46+
assert_example!(
47+
r#"
48+
89010123
49+
78121874
50+
87430965
51+
96549874
52+
45678903
53+
32019012
54+
01329801
55+
10456732
56+
"#,
57+
36,
58+
81
59+
);
60+
}
61+
}

0 commit comments

Comments
 (0)