From 005e655daf563e90b1bbb7ba39aa9e27d387a0ac Mon Sep 17 00:00:00 2001 From: YK Date: Mon, 2 Dec 2024 17:09:15 +0300 Subject: [PATCH] solution refactoring: day 1, with BinaryHeap> --- src/days/d1.rs | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/src/days/d1.rs b/src/days/d1.rs index ee084fe..dffe5d7 100644 --- a/src/days/d1.rs +++ b/src/days/d1.rs @@ -1,47 +1,39 @@ use crate::prelude::*; -pub type I = (Vec, Vec); +pub type I = (B>, B>); pub type O = u32; fn _parse (data: &str) -> I { - let (mut l, mut r) = (vec![], vec![]); + let (mut l, mut r) = (B::new(), B::new()); 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.push(Rev(left)); + r.push(Rev(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 _silver ((left, right): I) -> O { + left.into_iter_sorted().zip(right.into_iter_sorted()).fold(0, |acc, (l, r)| ({ println!("{:?}", (acc, l, r)); 0 }) + acc + l.0.abs_diff(r.0)) } fn _gold ((left, right): I) -> O { - let right = right.into_iter().counts(); + let right = right.into_iter().map(|e| e.0).counts(); - left.into_iter().fold(0, |acc, cur| acc + cur * *right.get(&cur).unwrap_or(&0) as u32) + left.into_iter().fold(0, |acc, cur| acc + cur.0 * *right.get(&cur.0).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 data = _parse(inc!(1)); let ans = _silver(data); assert_eq!(ans, 2196996) @@ -49,7 +41,7 @@ mod test { #[test] fn gold () { - let data = read(); + let data = _parse(inc!(1)); let ans = _gold(data); assert_eq!(ans, 23655822)