mirror of
https://github.com/theoludwig/advent_of_code_2023.git
synced 2024-12-08 00:45:53 +01:00
feat: day 8 part 2, solution brute force (slow)
This commit is contained in:
parent
ed00f1e3c6
commit
31bcb54699
10
day_8/input_example_3.txt
Normal file
10
day_8/input_example_3.txt
Normal file
@ -0,0 +1,10 @@
|
||||
LR
|
||||
|
||||
11A = (11B, XXX)
|
||||
11B = (XXX, 11Z)
|
||||
11Z = (11B, XXX)
|
||||
22A = (22B, XXX)
|
||||
22B = (22C, 22C)
|
||||
22C = (22Z, 22Z)
|
||||
22Z = (22B, 22B)
|
||||
XXX = (XXX, XXX)
|
@ -113,6 +113,35 @@ pub fn part_1(input: &str) -> usize {
|
||||
steps
|
||||
}
|
||||
|
||||
pub fn part_2(input: &str) -> usize {
|
||||
let desert_map = DesertMap::from_str(input).unwrap_or_default();
|
||||
let mut current_step_keys: Vec<String> = desert_map
|
||||
.nodes
|
||||
.keys()
|
||||
.filter(|key| key.ends_with('A'))
|
||||
.map(|key| key.to_string())
|
||||
.collect();
|
||||
let mut steps = 0;
|
||||
while !current_step_keys
|
||||
.iter()
|
||||
.all(|step_key| step_key.ends_with('Z'))
|
||||
{
|
||||
let direction_index = steps % desert_map.directions.len();
|
||||
let current_direction = &desert_map.directions[direction_index];
|
||||
for current_step_key in current_step_keys.iter_mut() {
|
||||
let current_step_value =
|
||||
if let Some(step_value) = desert_map.nodes.get(current_step_key) {
|
||||
step_value
|
||||
} else {
|
||||
break;
|
||||
};
|
||||
*current_step_key = current_step_value[current_direction.index()].to_string();
|
||||
}
|
||||
steps += 1;
|
||||
}
|
||||
steps
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod day_8_tests {
|
||||
use super::*;
|
||||
@ -131,4 +160,9 @@ mod day_8_tests {
|
||||
fn test_part_1() {
|
||||
assert_eq!(part_1(include_str!("../input.txt")), 15871);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part_2_example_3() {
|
||||
assert_eq!(part_2(include_str!("../input_example_3.txt")), 6);
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,8 @@
|
||||
use day_8::part_1;
|
||||
use day_8::{part_1, part_2};
|
||||
|
||||
fn main() {
|
||||
let input = include_str!("../input.txt");
|
||||
println!("- Day 8: Haunted Wasteland -");
|
||||
println!("Answer Part 1: {}", part_1(input));
|
||||
// println!("Answer Part 2: {}", part_2(input));
|
||||
println!("Answer Part 2: {}", part_2(input));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user