advent_of_code_2024/src/day1.rs

34 lines
941 B
Rust

pub fn day1() {
let input = crate::input(1);
let (mut left, mut right): (Vec<u64>, Vec<u64>) = input
.lines()
.filter(|line| !line.is_empty())
.map(|line| {
let nums: Vec<&str> = line.split_whitespace().collect();
(
nums[0].parse::<u64>().expect("Invalid left number"),
nums[1].parse::<u64>().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);
}