From e4e4fd6b98a9007dea225243bfac821d32657f7b Mon Sep 17 00:00:00 2001 From: kageru Date: Wed, 4 Dec 2019 21:46:37 +0100 Subject: [PATCH] Refactor D4P2 in Rust --- 2019/04/src/main.rs | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/2019/04/src/main.rs b/2019/04/src/main.rs index 1101a46..0ecfc02 100644 --- a/2019/04/src/main.rs +++ b/2019/04/src/main.rs @@ -2,23 +2,23 @@ use itertools::Itertools; pub fn main() { - let (lower, upper) = (172930, 683082); + let (lower, upper) = (172_930, 683_082); let valid_part1 = (lower..upper) .map(|n| n.to_string().chars().collect::>()) .filter(|n| n.is_sorted()) .filter(|v| v.clone().iter().dedup().count() != v.len()); println!("Part 1: {}", valid_part1.clone().count()); + let part2 = valid_part1 - .filter(|v| { - let (mut last, mut streak, mut double) = (' ', 0, false); - v.iter().for_each(|c| { - if streak == 2 && c != &last { - double = true - } - streak = if c == &last { streak + 1 } else { 1 }; - last = *c; - }); - double || streak == 2 + .filter(|vec| { + vec.iter() + .group_by(move |n| *n) + .into_iter() + .filter_map(|(_, v)| if v.count() == 2 { Some(true) } else { None }) + // can’t do this because I’m too smol brained for the borrow checker + //.filter(|(_, v)| v.count() == 2) + .count() + > 0 }) .count(); println!("Part 2: {}", part2);