diff options
Diffstat (limited to '2024/day10.rs')
| -rw-r--r-- | 2024/day10.rs | 22 |
1 files changed, 6 insertions, 16 deletions
diff --git a/2024/day10.rs b/2024/day10.rs index 7c8576d..ffe9f00 100644 --- a/2024/day10.rs +++ b/2024/day10.rs @@ -29,35 +29,26 @@ fn dfs(x0: i64, y0: i64, map: &Vec<Vec<i64>>, mut hs: HashSet<(i64, i64)>) -> Ha return hs; } -fn dfs2( - x0: i64, - y0: i64, - map: &Vec<Vec<i64>>, - mut path: Vec<(i64, i64)>, - mut hs: HashSet<Vec<(i64, i64)>>, -) -> HashSet<Vec<(i64, i64)>> { - //println!("{} {}", x0, y0); +fn dfs2(x0: i64, y0: i64, map: &Vec<Vec<i64>>) -> i64 { let h = map.len() as i64; let w = map[0].len() as i64; - path.push((x0, y0)); - let n = map[y0 as usize][x0 as usize]; if n == 9 { - hs.insert(path); - return hs; + return 1; } + let mut score = 0; for (dx, dy) in [(0, 1), (0, -1), (1, 0), (-1, 0)] { let x = x0 + dx as i64; let y = y0 + dy as i64; if (0 <= x) && (x < w) && (0 <= y) && (y < h) { if map[y as usize][x as usize] == n + 1 { - hs = dfs2(x, y, map, path.clone(), hs); + score += dfs2(x, y, map); } } } - return hs; + return score; } fn main() { @@ -92,8 +83,7 @@ fn main() { let hs = dfs(x0, y0, &map, HashSet::new()); res1 += hs.len(); - let hs2 = dfs2(x0, y0, &map, Vec::new(), HashSet::new()); - res2 += hs2.len(); + res2 += dfs2(x0, y0, &map); } println!("res1: {}", res1); |
