solution: day 1

This commit is contained in:
YK 2024-12-01 20:37:15 +03:00
parent 967419e50e
commit 1f82341f81
2 changed files with 58 additions and 0 deletions

View File

@ -1,3 +1,4 @@
pub mod d1;
// pub mod d2; // pub mod d2;
// pub mod d3; // pub mod d3;
// pub mod d4; // pub mod d4;

57
src/days/d1.rs Normal file
View File

@ -0,0 +1,57 @@
use crate::prelude::*;
pub type I = (Vec<u32>, Vec<u32>);
pub type O = u32;
fn _parse (data: &str) -> I {
let (mut l, mut r) = (vec![], vec![]);
data.lines().for_each(|line| {
let mut iter = line.split_whitespace();
let left = p!(n!(iter));
let right = p!(n!(iter));
l.push(left);
r.push(right);
});
(l, r)
}
fn _silver ((mut left, mut right): I) -> O {
left.sort();
right.sort();
left.into_iter().zip(right.into_iter()).fold(0, |acc, (l, r)| acc + l.abs_diff(r))
}
fn _gold ((left, right): I) -> O {
let right = right.into_iter().counts();
left.into_iter().fold(0, |acc, cur| acc + cur * *right.get(&cur).unwrap_or(&0) as u32)
}
#[cfg(test)]
mod test {
use super::*;
fn read () -> I {
let data = inc!(1);
_parse(data)
}
#[test]
fn silver () {
let data = read();
let ans = _silver(data);
assert_eq!(ans, 2196996)
}
#[test]
fn gold () {
let data = read();
let ans = _gold(data);
assert_eq!(ans, 23655822)
}
}