diff --git a/day09/src/main.rs b/day09/src/main.rs index e25ffec..683e3b4 100644 --- a/day09/src/main.rs +++ b/day09/src/main.rs @@ -2,16 +2,32 @@ fn main() { let data = std::fs::read_to_string("input.txt").unwrap(); part1(data.trim()); // 150914 - part2(data.trim()); + part2(data.trim()); // 11052855125 } fn part2(data: &str) { - // let mut input = data.to_string(); + let mut length = 0; + let mut pointer = 0; - // while input.contains('(') { - // input = decompress_sequence(&input); - // } - // println!("{}", input.len()); + let chars: Vec<_> = data.chars().collect(); + + let mut weights = vec![1_u64; chars.len()]; + + while let Some(c) = chars.get(pointer) { + if *c == '(' { + let (repeat_length, repeat_amount, marker_length) = parse_marker(&chars, &pointer); + + pointer += marker_length; + + for weight in &mut weights[pointer..pointer + repeat_length] { + *weight *= repeat_amount as u64; + } + } else { + length += weights[pointer]; + pointer += 1; + } + } + println!("{}", length); } fn part1(data: &str) {