pub fn day1() { let input = crate::input(1); let (mut left, mut right): (Vec, Vec) = input .lines() .filter(|line| !line.is_empty()) .map(|line| { let nums: Vec<&str> = line.split_whitespace().collect(); ( nums[0].parse::().expect("Invalid left number"), nums[1].parse::().expect("Invalid right number") ) }) .unzip(); println!("Found {} number pairs.", left.len()); left.sort(); right.sort(); let differences: u64 = left.iter() .zip(right.iter()) .map(|(a, b)| if a > b { a - b } else { b - a }) .sum(); println!("{}", differences); let similarity: u64 = left.iter() .map(|a| { let occurences = right.iter().filter(|b| a == *b).count(); a * occurences as u64 }) .sum(); println!("{}", similarity); }