From 62a9aec76d38b0557340be7fd8a3cd33b2f7c91a Mon Sep 17 00:00:00 2001 From: dqnid Date: Thu, 12 Dec 2024 08:21:21 +0100 Subject: [PATCH] day_9: init --- README.md | 2 +- assets/day_9_disk_input | 1 + src/advent_of_code/mod.rs | 27 ++++++++++++++++----------- src/advent_of_code/mon_09.rs | 19 +++++++++++++++++++ src/advent_of_code/types.rs | 4 ++++ src/advent_of_code/utils.rs | 23 +++++++++++++++++++++++ 6 files changed, 64 insertions(+), 12 deletions(-) create mode 100644 assets/day_9_disk_input diff --git a/README.md b/README.md index ab93d56..32f696a 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ https://adventofcode.com/2024 | 06 | Guard Gallivant | :pushpin: | :pushpin: | 2D navigation | | 07 | Bridge Repair | :pushpin: | :pushpin: | Equation parsing | | 08 | Resonant Collinearity | :pushpin: | | Matrix exploration | -| 09 | | | | | +| 09 | Disk fragmenter | | | | | 10 | | | | | | 11 | | | | | | 12 | | | | | diff --git a/assets/day_9_disk_input b/assets/day_9_disk_input new file mode 100644 index 0000000..f96c390 --- /dev/null +++ b/assets/day_9_disk_input @@ -0,0 +1 @@ +2333133121414131402 diff --git a/src/advent_of_code/mod.rs b/src/advent_of_code/mod.rs index 06778d2..c1a3422 100644 --- a/src/advent_of_code/mod.rs +++ b/src/advent_of_code/mod.rs @@ -1,11 +1,12 @@ -// mod fri_06; -// mod mon_02; // mod sun_01; -// mod thu_05; +// mod mon_02; // mod tue_03; // mod wed_04; +// mod thu_05; +// mod fri_06; // mod sat_07; -mod sun_08; +// mod sun_08; +mod mon_09; mod types; mod utils; @@ -17,6 +18,7 @@ pub fn today() { 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}"); @@ -62,11 +64,14 @@ pub fn historian_hysteria() { // 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 - ); + // 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"); } diff --git a/src/advent_of_code/mon_09.rs b/src/advent_of_code/mon_09.rs index e69de29..9670624 100644 --- a/src/advent_of_code/mon_09.rs +++ b/src/advent_of_code/mon_09.rs @@ -0,0 +1,19 @@ +use super::{utils::read_disk_map_input, DiskMap}; + +pub fn disk_fragmenter(input: &str) -> usize { + let disk_map = read_disk_map_input(input); + + let organized_disk_map = organize_disk_map(&disk_map); + println!("{:?}", disk_map); + println!("{:?}", organized_disk_map); + + 0 +} + +pub fn organize_disk_map(disk_map: &DiskMap) -> DiskMap { + let organized_disk_map: DiskMap = vec![]; + + for block in disk_map {} + + organized_disk_map +} diff --git a/src/advent_of_code/types.rs b/src/advent_of_code/types.rs index 11aab12..547aaaa 100644 --- a/src/advent_of_code/types.rs +++ b/src/advent_of_code/types.rs @@ -71,3 +71,7 @@ pub type AntenaList = Vec; pub type AntinodeCount = usize; pub type Antinode = (usize, usize); pub type AntinodeList = HashSet; + +// Disk fragmenter +pub type Block = Option; +pub type DiskMap = Vec; diff --git a/src/advent_of_code/utils.rs b/src/advent_of_code/utils.rs index d33af92..eb430f2 100644 --- a/src/advent_of_code/utils.rs +++ b/src/advent_of_code/utils.rs @@ -164,6 +164,29 @@ pub fn read_antena_map_input(input: &str) -> (RoofMap, AntenaList) { (roof_map, antena_list) } +pub fn read_disk_map_input(input: &str) -> DiskMap { + let mut disk_map: DiskMap = vec![]; + let raw_map = read_to_string(input).unwrap(); + + let mut id: usize = 0; + for (digit_index, char_digit) in raw_map.chars().enumerate() { + if let Some(digit) = char_digit.to_digit(10u32) { + for _ in 0..digit { + if digit_index % 2 == 0 { + disk_map.push(Some(id)); + } else { + disk_map.push(None); + } + } + if digit_index % 2 == 0 { + id += 1; + } + } + } + + disk_map +} + pub fn calc_distance(num_1: T, num_2: T) -> T where T: PartialOrd + Sub,