add day 9 part 2
got inspiration from reddit
This commit is contained in:
+22
-6
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user