day8 part1
This commit is contained in:
43
day08/src/main.rs
Normal file
43
day08/src/main.rs
Normal 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
|
||||
}
|
Reference in New Issue
Block a user