34 lines
941 B
Rust
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);
|
|
}
|