From d5dae5dee702ed0454f72ba69b13d67f89d9cee8 Mon Sep 17 00:00:00 2001 From: Daniel Heras Quesada Date: Sun, 15 Dec 2024 12:58:04 +0100 Subject: [PATCH] day_10: part 2 done --- README.md | 2 +- src/advent_of_code/mod.rs | 4 +++- src/advent_of_code/tue_10.rs | 32 +++++++++++++++++++++++++++----- 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index dcf56fa..c924392 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ https://adventofcode.com/2024 | 07 | Bridge Repair | :pushpin: | :pushpin: | Equation parsing | | 08 | Resonant Collinearity | :pushpin: | | Matrix exploration | | 09 | Disk fragmenter | :pushpin: | | Array indexing | -| 10 | Hoof It | :pushpin: | | Path finding | +| 10 | Hoof It | :pushpin: | :pushpin: | Path finding | | 11 | | | | | | 12 | | | | | | 13 | | | | | diff --git a/src/advent_of_code/mod.rs b/src/advent_of_code/mod.rs index 1b01b80..86a0b69 100644 --- a/src/advent_of_code/mod.rs +++ b/src/advent_of_code/mod.rs @@ -78,6 +78,8 @@ pub fn historian_hysteria() { // println!("The disk checksum is {}", disk_checksum); // Tuesday 10 - let trailhead_score = tue_10::hoof_it("./assets/day_10_trail_map_input"); + let (trailhead_score, full_trailhead_score) = + tue_10::hoof_it("./assets/day_10_trail_map_input"); println!("The trail head sum score is {}", trailhead_score); + println!("The full trail head sum score is {}", full_trailhead_score); } diff --git a/src/advent_of_code/tue_10.rs b/src/advent_of_code/tue_10.rs index c0710dc..95db3bc 100644 --- a/src/advent_of_code/tue_10.rs +++ b/src/advent_of_code/tue_10.rs @@ -2,10 +2,10 @@ use utils::read_trail_map_input; use super::*; -pub fn hoof_it(input: &str) -> usize { +pub fn hoof_it(input: &str) -> (usize, usize) { let trail_map = read_trail_map_input(input); - let vector_of_scores = explore_map(trail_map); + let (vector_of_scores, vector_of_all_scores) = explore_map(trail_map); let mut sum_of_scores: usize = 0; @@ -14,22 +14,29 @@ pub fn hoof_it(input: &str) -> usize { sum_of_scores += score; } - sum_of_scores + let mut sum_of_all_scores: usize = 0; + for score in vector_of_all_scores { + sum_of_all_scores += score; + } + + (sum_of_scores, sum_of_all_scores) } -pub fn explore_map(map: TrailMap) -> Vec { +pub fn explore_map(map: TrailMap) -> (Vec, Vec) { let mut trail_score_list: Vec = vec![]; + let mut full_trail_score_list: Vec = vec![]; for y_index in 0..map.len() { for x_index in 0..map[y_index].len() { if map[y_index][x_index] == 0 { let mut reached_ends: Vec<(usize, usize)> = vec![]; trail_score_list.push(explore_position(x_index, y_index, &map, &mut reached_ends)); + full_trail_score_list.push(explore_all_positions(x_index, y_index, &map)); } } } - trail_score_list + (trail_score_list, full_trail_score_list) } pub fn explore_position( @@ -55,6 +62,21 @@ pub fn explore_position( score_sum } +pub fn explore_all_positions(x: TrailPosition, y: TrailPosition, map: &TrailMap) -> usize { + if map[y][x] == 9 { + return 1; + } + + let mut score_sum: usize = 0; + for next_position in get_pos_surroundings(x, y, map) { + if map[next_position.1][next_position.0] == map[y][x] + 1 { + score_sum += explore_all_positions(next_position.0, next_position.1, map); + } + } + + score_sum +} + pub fn get_pos_surroundings( x: TrailPosition, y: TrailPosition,