From 71fb3478c3a69dbbbe75548fd4d4fa3f7f166521 Mon Sep 17 00:00:00 2001 From: Alpha Chen Date: Mon, 3 Dec 2018 20:43:34 -0800 Subject: [PATCH] [2018][rust][3.1] --- 2018/rust/src/bin/day_03.rs | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/2018/rust/src/bin/day_03.rs b/2018/rust/src/bin/day_03.rs index c636e37..23fda72 100644 --- a/2018/rust/src/bin/day_03.rs +++ b/2018/rust/src/bin/day_03.rs @@ -21,17 +21,24 @@ fn solve(input: &str) -> Result> { .map(str::trim) .map(Claim::from_str) .collect::>()?; - let fabric = claims.iter().fold(HashMap::new(), |mut fabric, claim| { + let fabric = claims.iter().fold(HashMap::new(), |mut fabric: HashMap<(usize, usize), Vec>, claim| { for square_inch in claim.square_inches() { fabric .entry(square_inch) - .and_modify(|count| *count += 1) - .or_insert(1); + .and_modify(|ids| ids.push(claim.id)) + .or_insert(vec![claim.id]); } fabric }); - let output = fabric.values().filter(|&&count| count > 1).count(); - Ok(output.to_string()) + let values: Vec<_> = fabric.values().collect(); + let output = values + .iter() + .map(|ids| ids[0]) + .filter(|id| !values.iter().any(|ids| ids.len() > 1 && ids.contains(id))) + .next() + .unwrap() + .to_string(); + Ok(output) } #[test] @@ -43,7 +50,7 @@ fn test_solve() { " .trim(); - assert_eq!(&solve(input).unwrap(), "4"); + assert_eq!(&solve(input).unwrap(), "3"); } #[derive(Debug, PartialEq, Eq)]