day_5: part 2 done
This commit is contained in:
@@ -7,7 +7,7 @@ https://adventofcode.com/2024
|
|||||||
| 02 | Red-Nosed Reports | :pushpin: | :pushpin: | Bidirectional arrays |
|
| 02 | Red-Nosed Reports | :pushpin: | :pushpin: | Bidirectional arrays |
|
||||||
| 03 | Mull It Over | :pushpin: | :pushpin: | Regex |
|
| 03 | Mull It Over | :pushpin: | :pushpin: | Regex |
|
||||||
| 04 | Ceres Search | :pushpin: | :pushpin: | Matrix multidirectional search |
|
| 04 | Ceres Search | :pushpin: | :pushpin: | Matrix multidirectional search |
|
||||||
| 05 | Print Queue | :pushpin: | | Queue order |
|
| 05 | Print Queue | :pushpin: | :pushpin: | Queue order |
|
||||||
| 06 | | | | |
|
| 06 | | | | |
|
||||||
| 07 | | | | |
|
| 07 | | | | |
|
||||||
| 08 | | | | |
|
| 08 | | | | |
|
||||||
|
|||||||
@@ -42,6 +42,8 @@ pub fn historian_hysteria() {
|
|||||||
println!("X-MAS appears {} times", x_mas_appearances);
|
println!("X-MAS appears {} times", x_mas_appearances);
|
||||||
|
|
||||||
// Thursday 05
|
// Thursday 05
|
||||||
let queue_mid_sum = thu_05::mid_queue_sum("./assets/day_5_rules_queue_input");
|
let (queue_mid_sum, fixed_queue_mid_sum) =
|
||||||
|
thu_05::mid_queue_sum("./assets/day_5_rules_queue_input");
|
||||||
println!("The update mid-queue-sum is {}", queue_mid_sum);
|
println!("The update mid-queue-sum is {}", queue_mid_sum);
|
||||||
|
println!("The fixed update mid-queue-sum is {}", fixed_queue_mid_sum);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,24 +2,36 @@ use utils::read_rules_and_queue;
|
|||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
pub fn mid_queue_sum(input: &str) -> u32 {
|
pub fn mid_queue_sum(input: &str) -> (u32, u32) {
|
||||||
let (rules, queues) = read_rules_and_queue(input);
|
let (rules, queues) = read_rules_and_queue(input);
|
||||||
|
|
||||||
let mut valid_queue_list: Vec<Queue> = vec![];
|
let mut valid_queue_list: Vec<Queue> = vec![];
|
||||||
|
let mut invalid_queue_list: Vec<Queue> = vec![];
|
||||||
|
let mut fixed_queue_list: Vec<Queue> = vec![];
|
||||||
|
|
||||||
let mut sum_of_mids: u32 = 0;
|
let mut sum_of_mids: u32 = 0;
|
||||||
|
let mut sum_of_fixed_mids: u32 = 0;
|
||||||
|
|
||||||
for queue in queues {
|
for queue in queues {
|
||||||
if is_queue_valid(&queue, &rules) {
|
if is_queue_valid(&queue, &rules) {
|
||||||
valid_queue_list.push(queue);
|
valid_queue_list.push(queue);
|
||||||
|
} else {
|
||||||
|
invalid_queue_list.push(queue);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for mut queue in invalid_queue_list {
|
||||||
|
fixed_queue_list.push(fix_queue(&mut queue, &rules))
|
||||||
|
}
|
||||||
|
|
||||||
for queue in valid_queue_list {
|
for queue in valid_queue_list {
|
||||||
sum_of_mids += queue[queue.len() / 2];
|
sum_of_mids += queue[queue.len() / 2];
|
||||||
}
|
}
|
||||||
|
for queue in fixed_queue_list {
|
||||||
|
sum_of_fixed_mids += queue[queue.len() / 2];
|
||||||
|
}
|
||||||
|
|
||||||
sum_of_mids
|
(sum_of_mids, sum_of_fixed_mids)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn is_queue_valid(queue: &Queue, rules: &Vec<Rule>) -> bool {
|
fn is_queue_valid(queue: &Queue, rules: &Vec<Rule>) -> bool {
|
||||||
@@ -35,6 +47,22 @@ fn is_queue_valid(queue: &Queue, rules: &Vec<Rule>) -> bool {
|
|||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn fix_queue(queue: &mut Queue, rules: &Vec<Rule>) -> Queue {
|
||||||
|
for _index in 0..queue.len() {
|
||||||
|
for rule in rules {
|
||||||
|
if let Ok(first_index) = get_index_of(queue, &rule.0) {
|
||||||
|
if let Ok(second_index) = get_index_of(queue, &rule.1) {
|
||||||
|
if first_index > second_index {
|
||||||
|
queue.swap(first_index, second_index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
queue.to_vec()
|
||||||
|
}
|
||||||
|
|
||||||
fn get_index_of<T>(vec: &Vec<T>, element: &T) -> Result<usize, ()>
|
fn get_index_of<T>(vec: &Vec<T>, element: &T) -> Result<usize, ()>
|
||||||
where
|
where
|
||||||
T: PartialEq,
|
T: PartialEq,
|
||||||
|
|||||||
Reference in New Issue
Block a user