Complete Day 5
This commit is contained in:
@@ -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(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user