Refactor D4P2 in Rust

This commit is contained in:
kageru 2019-12-04 21:46:37 +01:00
parent ca5b0fc3aa
commit e4e4fd6b98
Signed by: kageru
GPG Key ID: 8282A2BEA4ADA3D2

@ -2,23 +2,23 @@
use itertools::Itertools; use itertools::Itertools;
pub fn main() { pub fn main() {
let (lower, upper) = (172930, 683082); let (lower, upper) = (172_930, 683_082);
let valid_part1 = (lower..upper) let valid_part1 = (lower..upper)
.map(|n| n.to_string().chars().collect::<Vec<_>>()) .map(|n| n.to_string().chars().collect::<Vec<_>>())
.filter(|n| n.is_sorted()) .filter(|n| n.is_sorted())
.filter(|v| v.clone().iter().dedup().count() != v.len()); .filter(|v| v.clone().iter().dedup().count() != v.len());
println!("Part 1: {}", valid_part1.clone().count()); println!("Part 1: {}", valid_part1.clone().count());
let part2 = valid_part1 let part2 = valid_part1
.filter(|v| { .filter(|vec| {
let (mut last, mut streak, mut double) = (' ', 0, false); vec.iter()
v.iter().for_each(|c| { .group_by(move |n| *n)
if streak == 2 && c != &last { .into_iter()
double = true .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
streak = if c == &last { streak + 1 } else { 1 }; //.filter(|(_, v)| v.count() == 2)
last = *c; .count()
}); > 0
double || streak == 2
}) })
.count(); .count();
println!("Part 2: {}", part2); println!("Part 2: {}", part2);