From dc2df6d7fbe179cbf83f560396861e71a4990e47 Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Tue, 12 Dec 2023 15:28:07 +0100 Subject: [PATCH] =?UTF-8?q?day(12):=20refactor=20=E2=80=B9unfold=E2=80=BA?= =?UTF-8?q?=20and=20test=20it?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Matej Focko --- src/bin/day12.rs | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/src/bin/day12.rs b/src/bin/day12.rs index bb3affd..1302f95 100644 --- a/src/bin/day12.rs +++ b/src/bin/day12.rs @@ -9,7 +9,7 @@ use aoc_2023::*; type Output1 = usize; type Output2 = Output1; -#[derive(Debug)] +#[derive(Debug, PartialEq, Eq)] struct Row { map: VecDeque, damaged: VecDeque, @@ -118,9 +118,12 @@ impl Row { fn unfold(&self) -> Row { Row::new( - vec![self.map.iter().collect::(); 5] - .join("?") - .chars() + self.map + .iter() + .cloned() + .chain(['?']) + .cycle() + .take(5 * (self.map.len() + 1) - 1) .collect_vec(), self.damaged .iter() @@ -166,6 +169,29 @@ test_sample!(day_12, Day12, 21, 525152); mod day_12_extended { use super::*; + #[test] + fn unfold_1() { + let row = Row::new(".#".chars().collect_vec(), vec![1]); + assert_eq!( + row.unfold(), + Row::new(".#?.#?.#?.#?.#".chars().collect_vec(), vec![1, 1, 1, 1, 1]) + ); + } + + #[test] + fn unfold_2() { + let row = Row::new("???.###".chars().collect_vec(), vec![1, 1, 3]); + assert_eq!( + row.unfold(), + Row::new( + "???.###????.###????.###????.###????.###" + .chars() + .collect_vec(), + vec![1, 1, 3, 1, 1, 3, 1, 1, 3, 1, 1, 3, 1, 1, 3] + ) + ); + } + #[test] fn arrangements_1() { let mut row = Row::new("???.###".chars().collect_vec(), vec![1, 1, 3]);