Compare commits

..

No commits in common. "005e655daf563e90b1bbb7ba39aa9e27d387a0ac" and "0b2dc35cad012a3485e929b5df1755717d6a305d" have entirely different histories.

3 changed files with 19 additions and 15 deletions

View File

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

View File

@ -2,7 +2,6 @@
#![feature(array_windows)] #![feature(array_windows)]
#![feature(decl_macro)] #![feature(decl_macro)]
#![feature(iter_array_chunks)] #![feature(iter_array_chunks)]
#![feature(binary_heap_into_iter_sorted)]
pub mod days; pub mod days;
pub mod utils; pub mod utils;

View File

@ -8,10 +8,7 @@ pub use std::{
VecDeque as D, VecDeque as D,
BinaryHeap as B, BinaryHeap as B,
}, },
cmp::{ cmp::Ordering as Or,
Ordering as Or,
Reverse as Rev,
},
}; };
pub type SS = &'static str; pub type SS = &'static str;