Compare commits

...

1 Commits

Author SHA1 Message Date
523142f2f6 feat: module organization 2025-12-05 20:18:14 +01:00
14 changed files with 162 additions and 130 deletions

View File

@@ -1,5 +1,12 @@
use super::*;
pub fn today() {
let key = get_key("./assets/day_1_input").unwrap();
println!("The key is: {key}");
let similarity = get_similarity("./assets/day_1_input");
println!("The similarity is: {similarity}");
}
pub fn get_key(input: &str) -> Result<Key, ()> {
let mut key: Id = 0;

View File

@@ -2,6 +2,11 @@ use utils::{calc_distance, read_report_list};
use super::*;
pub fn today() {
let safe_report_count = check_reports_safety("./assets/day_2_reports_input");
println!("There are {safe_report_count} safe reports");
}
pub fn check_reports_safety(input: &str) -> ReportSafety {
let report_list = read_report_list(input);

View File

@@ -3,6 +3,20 @@ use utils::read_instruction_input;
use super::*;
pub fn today() {
let multiplication_added_result = mull_it_over("./assets/day_3_instruction_input");
println!(
"The result of the sum of multiplications is {}",
multiplication_added_result
);
let conditional_multiplication_added_result =
mull_it_over_conditional("./assets/day_3_instruction_input");
println!(
"The result of the conditional sum of multiplications is {}",
conditional_multiplication_added_result
);
}
pub fn mull_it_over(input: &str) -> MulNumber {
let instruction_input = read_instruction_input(input);

View File

@@ -5,6 +5,12 @@ use super::*;
const SEARCHED_WORD: &str = "XMAS";
const X_SEARCHED_WORD: &str = "MAS";
pub fn today() {
let (xmas_appearances, x_mas_appearances) = ceres_search("./assets/day_4_input");
println!("XMAS appears {} times", xmas_appearances);
println!("X-MAS appears {} times", x_mas_appearances);
}
pub fn ceres_search(input: &str) -> (XMASCount, XMASCount) {
let puzzle_matrix = read_ceres_puzzle_input(input);

View File

@@ -2,6 +2,12 @@ use utils::read_rules_and_queue;
use super::*;
pub fn today() {
let (queue_mid_sum, fixed_queue_mid_sum) = mid_queue_sum("./assets/day_5_rules_queue_input");
println!("The update mid-queue-sum is {}", queue_mid_sum);
println!("The fixed update mid-queue-sum is {}", fixed_queue_mid_sum);
}
pub fn mid_queue_sum(input: &str) -> (u32, u32) {
let (rules, queues) = read_rules_and_queue(input);

View File

@@ -2,6 +2,13 @@ use std::collections::HashSet;
use super::*;
pub fn today() {
let (guard_position_count, loop_obstacle_count) =
guard_gallivant("./assets/day_6_guard_map_input");
println!("The guard will visit {} positions", guard_position_count);
println!("The guard would loop on {} positions", loop_obstacle_count);
}
impl Guard {
fn step(&mut self, map: &FloorMap) -> IsGuardOut {
let mut future_x = self.x;

View File

@@ -1,5 +1,10 @@
use super::*;
pub fn today() {
let calibration_result = bridge_repair("./assets/day_7_calibrations_input");
println!("The total calibration result is {}", calibration_result);
}
pub fn bridge_repair(input: &str) -> CalibrationResult {
let equation_vec = utils::read_calibration_equations(input);
let mut sum_result: CalibrationResult = 0;

View File

@@ -4,41 +4,25 @@ use utils::read_antena_map_input;
use super::*;
pub fn today() {
let (antinode_count, antinode_count_any) =
resonant_collinearity("./assets/day_8_antena_map_input");
println!("The total antinode positions is {}", antinode_count);
println!(
"The total antinode positions in any grid is {}",
antinode_count_any
);
}
pub fn resonant_collinearity(input: &str) -> (AntinodeCount, AntinodeCount) {
let (roof_map, antena_list) = read_antena_map_input(input);
(
get_antinode_set_of_aligned_position(&antena_list, &roof_map).len(),
get_antinode_set_of_any_aligned_position(&antena_list, &roof_map).len(),
0,
)
}
pub fn get_antinode_set_of_any_aligned_position(
antena_list: &AntenaList,
map: &RoofMap,
) -> AntinodeList {
let mut antinode_list: AntinodeList = HashSet::new();
for antena in antena_list {
for complementary_antena in antena_list {
if antena != complementary_antena && antena.2 == complementary_antena.2 {
let distance_x = (antena.1 as i32 - complementary_antena.1 as i32).abs() as usize;
let distance_y = (antena.0 as i32 - complementary_antena.0 as i32).abs() as usize;
let mut count: usize = 0;
// loop {
// let test_x = distance_x * count;
// }
// antinode_list.insert(pair);
}
}
}
antinode_list
}
pub fn get_antinode_set_of_aligned_position(
antena_list: &AntenaList,
map: &RoofMap,
@@ -200,8 +184,8 @@ pub fn is_station_between(a: (usize, usize), b: (usize, usize), map: &RoofMap) -
let x_diff = (a.1 as i32 - b.1 as i32).abs() as usize;
'check_diagonal: loop {
let mut next_x: i32 = 0;
let mut next_y: i32 = 0;
let next_x: i32;
let next_y: i32;
if a.1 > b.1 {
if a.0 > b.0 {
@@ -240,6 +224,7 @@ pub fn is_station_between(a: (usize, usize), b: (usize, usize), map: &RoofMap) -
}
}
}
if let Some(_) = map[next_y as usize][next_x as usize] {
return true;
}

View File

@@ -1,5 +1,10 @@
use super::{utils::read_disk_map_input, DiskChecksum, DiskMap};
pub fn today() {
let disk_checksum = disk_fragmenter("./assets/day_9_disk_input");
println!("The disk checksum is {}", disk_checksum);
}
pub fn disk_fragmenter(input: &str) -> DiskChecksum {
let disk_map = read_disk_map_input(input);

View File

@@ -2,6 +2,12 @@ use utils::read_trail_map_input;
use super::*;
pub fn today() {
let (trailhead_score, full_trailhead_score) = hoof_it("./assets/day_10_trail_map_input");
println!("The trail head sum score is {}", trailhead_score);
println!("The full trail head sum score is {}", full_trailhead_score);
}
pub fn hoof_it(input: &str) -> (usize, usize) {
let trail_map = read_trail_map_input(input);

View File

@@ -1,5 +1,20 @@
use super::*;
pub fn today() {
let blink_count: usize = 25;
let stone_count = plutonian_pebbles("./assets/day_11_stone_arrangement_input", blink_count);
println!(
"The total of stones after {} is {}",
blink_count, stone_count
);
let blink_count: usize = 75;
let stone_count = plutonian_pebbles("./assets/day_11_stone_arrangement_input", blink_count);
println!(
"The total of stones after {} is {}",
blink_count, stone_count
);
}
pub fn plutonian_pebbles(input: &str, blink_count: usize) -> StoneCount {
let stone_list = utils::read_stone_arrangement(input);

View File

@@ -1,5 +1,10 @@
use super::*;
pub fn today() {
let fence_cost = garden_groups("./assets/day_12_garden_input");
println!("The garden fence total cost is {}", fence_cost);
}
pub fn garden_groups(input: &str) -> usize {
let garden = utils::read_garden_arrangement_input(input);

View File

@@ -1,105 +1,60 @@
// mod sun_01;
// mod mon_02;
// mod tue_03;
// mod wed_04;
// mod thu_05;
// mod fri_06;
// mod sat_07;
// mod sun_08;
// mod mon_09;
// mod tue_10;
// mod wed_11;
mod thu_12;
mod day_01;
mod day_02;
mod day_03;
mod day_04;
mod day_05;
mod day_06;
mod day_07;
mod day_08;
mod day_09;
mod day_10;
mod day_11;
mod day_12;
mod types;
mod utils;
use types::*;
pub fn today() {
historian_hysteria()
pub fn today(day: u8) {
match day {
1 => {
day_01::today();
}
2 => {
day_02::today();
}
3 => {
day_03::today();
}
4 => {
day_04::today();
}
5 => {
day_05::today();
}
6 => {
day_06::today();
}
7 => {
day_07::today();
}
8 => {
day_08::today();
}
9 => {
day_09::today();
}
10 => {
day_10::today();
}
11 => {
day_11::today();
}
12 => {
day_12::today();
}
_ => {
println!("Not a valid day.");
}
}
pub fn historian_hysteria() {
// NOTE: previous days are commented to speed up (all the blame is on day 6)
// Sunday 01
// let key = sun_01::get_key("./assets/day_1_input").unwrap();
// println!("The key is: {key}");
// let similarity = sun_01::get_similarity("./assets/day_1_input");
// println!("The similarity is: {similarity}");
// Monday 02
// let safe_report_count = mon_02::check_reports_safety("./assets/day_2_reports_input");
// println!("There are {safe_report_count} safe reports");
// Tuesday 03
// let multiplication_added_result = tue_03::mull_it_over("./assets/day_3_instruction_input");
// println!(
// "The result of the sum of multiplications is {}",
// multiplication_added_result
// );
// let conditional_multiplication_added_result =
// tue_03::mull_it_over_conditional("./assets/day_3_instruction_input");
// println!(
// "The result of the conditional sum of multiplications is {}",
// conditional_multiplication_added_result
// );
// Wednesday 04
// let (xmas_appearances, x_mas_appearances) = wed_04::ceres_search("./assets/day_4_input");
// println!("XMAS appears {} times", xmas_appearances);
// println!("X-MAS appears {} times", x_mas_appearances);
// Thursday 05
// 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 fixed update mid-queue-sum is {}", fixed_queue_mid_sum);
// Friday 06
// let (guard_position_count, loop_obstacle_count) =
// fri_06::guard_gallivant("./assets/day_6_guard_map_input");
// println!("The guard will visit {} positions", guard_position_count);
// println!("The guard would loop on {} positions", loop_obstacle_count);
// Saturday 07
// let calibration_result = sat_07::bridge_repair("./assets/day_7_calibrations_input");
// println!("The total calibration result is {}", calibration_result);
// Sunday 08
// let (antinode_count, antinode_count_any) =
// sun_08::resonant_collinearity("./assets/day_8_antena_map_input");
// println!("The total antinode positions is {}", antinode_count);
// println!(
// "The total antinode positions in any grid is {}",
// antinode_count_any
// );
// Monday 09
// let disk_checksum = mon_09::disk_fragmenter("./assets/day_9_disk_input");
// println!("The disk checksum is {}", disk_checksum);
// Tuesday 10
// let (trailhead_score, full_trailhead_score) =
// tue_10::hoof_it("./assets/day_10_trail_map_input");
// println!("The trail head sum score is {}", trailhead_score);
// println!("The full trail head sum score is {}", full_trailhead_score);
// let blink_count: usize = 25;
// let stone_count =
// wed_11::plutonian_pebbles("./assets/day_11_stone_arrangement_input", blink_count);
// println!(
// "The total of stones after {} is {}",
// blink_count, stone_count
// );
// let blink_count: usize = 75;
// let stone_count =
// wed_11::plutonian_pebbles("./assets/day_11_stone_arrangement_input", blink_count);
// println!(
// "The total of stones after {} is {}",
// blink_count, stone_count
// );
// Thursday 12
let fence_cost = thu_12::garden_groups("./assets/day_12_garden_input");
println!("The garden fence total cost is {}", fence_cost);
}

View File

@@ -1,7 +1,18 @@
#![allow(dead_code)]
use std::env;
// #![allow(dead_code)]
mod advent_of_code;
fn main() {
advent_of_code::today();
let args: Vec<String> = env::args().collect();
println!("<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>");
println!(">>> Welcome to advent of code 2024 <<<");
println!("<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>");
if args.len() == 2 {
let day: u8 = args[1].parse().expect("Not a valid day.");
advent_of_code::today(day);
} else {
println!("Tell me a day!")
}
println!("Happy new year!");
}