Johann Woelper преди 4 години
родител
ревизия
939b3586bf
променени са 3 файла, в които са добавени 23 реда и са изтрити 12 реда
  1. 21 12
      src/day_3.rs
  2. 1 0
      src/wire1
  3. 1 0
      src/wire2

+ 21 - 12
src/day_3.rs

@@ -42,28 +42,35 @@ fn spawn_points(pattern: &str) -> Vec<(i32, i32)> {
 }
 
 
-fn run_instruction_set(instructions: Vec<&str>, grid: &mut HashMap<(i32,i32), i32>) {
+fn run_instruction_set(instructions: Vec<String>, grid: &mut HashMap<(i32,i32), i32>) -> Option<i32>{
     let mut cursor = (0,0);
-
+    let mut closest = std::i32::MAX; // largest i32 ever
     for instruction in instructions {
         
-        for pt in spawn_points(instruction) {
-            cursor.0 += pt.0;
-            cursor.1 += pt.1;
-            println!("Marching to {:?}", cursor);
+        for pt in spawn_points(&instruction) {
+            // println!("Marching to {:?}", cursor);
             if let Some(occupied_pt) = grid.get(&cursor) {
-                println!("Point present @{:?}", pt);
-
+                println!("Point present @{:?}", cursor);
+                let dist = cursor.0.abs()+cursor.1.abs();
+                if dist < closest && dist > 0 {
+                    closest = dist;
+                }
                 grid.insert(cursor, occupied_pt + 1);
             } else {
-
                 grid.insert(cursor, 0);
             }
+            cursor.0 += pt.0;
+            cursor.1 += pt.1;
 
         }
 
 
     }
+
+    match closest {
+        std::i32::MAX => None,
+        _ => Some(closest)
+    }
 }
 
 fn solve() {
@@ -72,12 +79,14 @@ fn solve() {
     // Hashmap that has a 2d point as key and a vec for wire indices
     let mut grid: HashMap<(i32,i32), i32> = HashMap::new();
 
-    let w1 = vec!["R8","U5","L5","D3"];
-    let w2 = vec!["U7","R6","D4","L4"];
+    let w1s = include_str!("wire1");
+    let w2s = include_str!("wire2");
 
+    let w1: Vec<String> = w1s.split(",").map(|s| s.to_string()).collect();
+    let w2: Vec<String> = w2s.split(",").map(|s| s.to_string()).collect();
 
     run_instruction_set(w1, &mut grid);
-    run_instruction_set(w2, &mut grid);
+    dbg!(run_instruction_set(w2, &mut grid));
 
     // dbg!(grid);
 

Файловите разлики са ограничени, защото са твърде много
+ 1 - 0
src/wire1


Файловите разлики са ограничени, защото са твърде много
+ 1 - 0
src/wire2