|
@@ -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);
|
|
|
|