Jelajahi Sumber

aaaand day12pt2

Jake Fenton 1 tahun lalu
induk
melakukan
25c864dfe2
1 mengubah file dengan 33 tambahan dan 3 penghapusan
  1. 33 3
      src/bin/12.rs

+ 33 - 3
src/bin/12.rs

@@ -123,8 +123,38 @@ pub fn part_one(input: &str) -> Option<usize> {
 
 }
 
-pub fn part_two(input: &str) -> Option<u32> {
-    None
+pub fn part_two(input: &str) -> Option<usize> {
+    let _map: Vec<Vec<char>> = input.lines().map(|line| line.chars().collect()).collect();
+    let mut end_coord = Point { x: 0, y: 0 };
+    let mut start_coord = Point { x: 0, y: 0 };
+    let mut to_visit: HashSet<Point> = HashSet::new();
+    let mut distances: HashMap<Point, usize> = HashMap::new();
+
+
+    for (r_idx, row) in _map.iter().enumerate() {
+        for (col_idx, c) in row.iter().enumerate() {
+            to_visit.insert(Point {x: col_idx, y: r_idx});
+            distances.insert(Point {x: col_idx, y: r_idx}, usize::MAX);
+            if *c == 'E' {
+                end_coord = Point {y: r_idx, x: col_idx};
+            } else if *c == 'S' {
+                start_coord = Point {y: r_idx, x: col_idx};
+                distances.insert(Point {x: col_idx, y: r_idx}, 0);
+            } else if *c == 'a' {
+                distances.insert(Point {x: col_idx, y: r_idx}, 0);
+            }
+        }
+    }
+
+
+    let mut map = HeightMap {
+        best_steps: HashMap::new(),
+        map: _map,
+        start: start_coord.clone(),
+        end: end_coord.clone()
+    };
+    dijkstra(map, &mut to_visit, &mut distances, &end_coord);
+    return Some(distances[&end_coord]);
 }
 
 fn main() {
@@ -146,6 +176,6 @@ mod tests {
     #[test]
     fn test_part_two() {
         let input = advent_of_code::read_file("examples", 12);
-        assert_eq!(part_two(&input), None);
+        assert_eq!(part_two(&input), Some(29));
     }
 }