Complete Day 5

This commit is contained in:
2025-05-30 08:24:13 -05:00
parent 0a6971991e
commit ae8dcc6a03
2 changed files with 140 additions and 5 deletions

View File

@@ -6,6 +6,15 @@ use std::{
io::{BufReader, prelude::*},
};
fn accumulate_middle_pages(page_updates: Vec<Vec<i64>>) -> i64 {
let mut accumulator = 0;
for update in page_updates {
let middle_page = update[update.len() / 2];
accumulator += middle_page;
}
accumulator
}
fn main() -> Result<(), Box<dyn Error>> {
// Handle command input
let args: Vec<String> = env::args().collect();
@@ -78,13 +87,36 @@ fn main() -> Result<(), Box<dyn Error>> {
}
}
let mut accumulator = 0;
for update in valid_page_updates {
let middle_page = update[update.len() / 2];
accumulator += middle_page;
let accumulator = accumulate_middle_pages(valid_page_updates);
println!("Sum of middle pages from valid updates: {}", accumulator);
let mut fixed_updates = Vec::new();
for page_update in invalid_page_updates {
let mut reordered_page_update: Vec<i64> = Vec::new();
for page in page_update {
let inserted = if let Some(rule_set) = page_rules.get(&page) {
let mut inserted = false;
for (i, reordered_page) in reordered_page_update.iter().enumerate() {
if rule_set.contains(reordered_page) {
reordered_page_update.insert(i, page);
inserted = true;
break;
}
}
inserted
} else {
reordered_page_update.push(page);
true
};
if !inserted {
reordered_page_update.push(page);
}
}
fixed_updates.push(reordered_page_update);
}
println!("Sum of middle pages from valid updates: {}", accumulator);
let accumulator = accumulate_middle_pages(fixed_updates);
println!("Sum of middle pages from fixed updates: {}", accumulator);
Ok(())
}