From 06894b34556d01a0d3b5a308b29feab206392e1d Mon Sep 17 00:00:00 2001 From: Bert Peters Date: Mon, 11 Dec 2023 08:54:33 +0100 Subject: [PATCH] Implement 2023 day 11 part 2 --- 2023/src/day11.rs | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/2023/src/day11.rs b/2023/src/day11.rs index 07b7329..61c6d81 100644 --- a/2023/src/day11.rs +++ b/2023/src/day11.rs @@ -6,12 +6,12 @@ fn find_doubles(occupied: IndexSet, len: usize) -> Vec { (0..len).filter(|&v| !occupied.contains(v)).collect() } -fn transform(pos: usize, doubles: &[usize]) -> usize { +fn transform(pos: usize, doubles: &[usize]) -> usize { let before = doubles.partition_point(|&v| v < pos); - pos + before + pos + before * (S - 1) } -pub fn part1(input: &[u8]) -> anyhow::Result { +fn part_common(input: &[u8]) -> anyhow::Result { let map = Grid::new(input)?; let mut stars = Vec::new(); let mut cols_occupied = IndexSet::with_capacity(map.width()); @@ -30,8 +30,8 @@ pub fn part1(input: &[u8]) -> anyhow::Result { let rows_doubled = find_doubles(rows_occupied, map.height()); for star in &mut stars { - star.0 = transform(star.0, &cols_doubled); - star.1 = transform(star.1, &rows_doubled); + star.0 = transform::(star.0, &cols_doubled); + star.1 = transform::(star.1, &rows_doubled); } let total: usize = stars @@ -47,8 +47,12 @@ pub fn part1(input: &[u8]) -> anyhow::Result { Ok(total.to_string()) } -pub fn part2(_input: &[u8]) -> anyhow::Result { - anyhow::bail!("Not implemented") +pub fn part1(input: &[u8]) -> anyhow::Result { + part_common::<2>(input) +} + +pub fn part2(input: &[u8]) -> anyhow::Result { + part_common::<1_000_000>(input) } #[cfg(test)] @@ -62,7 +66,9 @@ mod tests { assert_eq!("374", part1(SAMPLE).unwrap()); } - // #[test] - // fn sample_part2() { - // } + #[test] + fn sample_scaled() { + assert_eq!("1030", part_common::<10>(SAMPLE).unwrap()); + assert_eq!("8410", part_common::<100>(SAMPLE).unwrap()); + } }