From 6422973ea78602def6bb0b21c337c06295afab55 Mon Sep 17 00:00:00 2001 From: timeshifter Date: Tue, 30 Jun 2026 10:57:11 +0200 Subject: [PATCH] add day 9 part 2 got inspiration from reddit --- day09/src/main.rs | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) 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) {