day8 part1

This commit is contained in:
2023-12-10 15:05:34 -05:00
parent 906b5c7254
commit 7dec743fbb
4 changed files with 834 additions and 0 deletions

43
day08/src/main.rs Normal file
View File

@@ -0,0 +1,43 @@
use std::{fs, collections::{HashMap, VecDeque}};
fn main() {
let input = fs::read_to_string("input.txt").unwrap();
let input: Vec<_> = input.split("\n\n").collect();
let (directions, nodes) = (input[0], input[1]);
let directions: Vec<_> = directions.chars().map(|char| {
match char {
'L' => Direction::Left,
'R' => Direction::Right,
_ => panic!("Invalid direction!")
}
}).collect();
let nodes: HashMap<&str, (&str, &str)> = nodes.split('\n')
.map(|line| {
let line = line.split('=').map(|x| x.trim()).collect::<Vec<_>>();
let children: Vec<_> = line[1].trim_matches(|c| c == '(' || c == ')').split(", ").collect();
(line[0], (children[0], children[1]))
}).collect();
let mut cur_node = "AAA";
let mut step_queue = VecDeque::from(directions);
let mut step_count = 0;
while cur_node != "ZZZ" {
step_count += 1;
let cur_step = step_queue.pop_front().unwrap();
match cur_step {
Direction::Left => cur_node = nodes[cur_node].0,
Direction::Right => cur_node = nodes[cur_node].1,
}
step_queue.push_back(cur_step);
}
println!("{:?}", step_count);
}
#[derive(Debug)]
enum Direction {
Left,
Right
}