diff --git a/README.md b/README.md index 32f696a..265bb3e 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 | Disk fragmenter | | | | +| 09 | Disk fragmenter | :pushpin: | | Array indexing | | 10 | | | | | | 11 | | | | | | 12 | | | | | diff --git a/src/advent_of_code/mon_09.rs b/src/advent_of_code/mon_09.rs index 24d6ee8..255a71a 100644 --- a/src/advent_of_code/mon_09.rs +++ b/src/advent_of_code/mon_09.rs @@ -1,14 +1,10 @@ use super::{utils::read_disk_map_input, DiskChecksum, DiskMap}; -// Last result: 6349343813585 - pub fn disk_fragmenter(input: &str) -> DiskChecksum { let disk_map = read_disk_map_input(input); let organized_disk_map = organize_disk_map(disk_map); - println!("Organized map: {:?}", organized_disk_map); - calc_disk_check_sum(&organized_disk_map) } @@ -18,20 +14,16 @@ pub fn organize_disk_map(mut disk_map: DiskMap) -> DiskMap { 'outer: loop { if end_index <= start_index || start_index > disk_map.len() - 1 { - println!( - "Broke out of outer: {} {} with len {}", - start_index, - end_index, - disk_map.len() - ); break 'outer; } if let None = disk_map[start_index] { 'inner: loop { + if end_index <= start_index { + break 'inner; + } if let Some(_) = disk_map[end_index] { disk_map.swap(start_index, end_index); - end_index -= 1; break 'inner; } end_index -= 1; diff --git a/src/advent_of_code/utils.rs b/src/advent_of_code/utils.rs index eb430f2..5e934bf 100644 --- a/src/advent_of_code/utils.rs +++ b/src/advent_of_code/utils.rs @@ -170,16 +170,18 @@ pub fn read_disk_map_input(input: &str) -> DiskMap { 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 let Some(digit) = char_digit.to_digit(10) { + if digit > 0 { + 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; } - } - if digit_index % 2 == 0 { - id += 1; } } }