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();
|
let data = std::fs::read_to_string("input.txt").unwrap();
|
||||||
|
|
||||||
part1(data.trim()); // 150914
|
part1(data.trim()); // 150914
|
||||||
part2(data.trim());
|
part2(data.trim()); // 11052855125
|
||||||
}
|
}
|
||||||
|
|
||||||
fn part2(data: &str) {
|
fn part2(data: &str) {
|
||||||
// let mut input = data.to_string();
|
let mut length = 0;
|
||||||
|
let mut pointer = 0;
|
||||||
|
|
||||||
// while input.contains('(') {
|
let chars: Vec<_> = data.chars().collect();
|
||||||
// input = decompress_sequence(&input);
|
|
||||||
// }
|
let mut weights = vec![1_u64; chars.len()];
|
||||||
// println!("{}", input.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) {
|
fn part1(data: &str) {
|
||||||
|
|||||||
Reference in New Issue
Block a user