Compare commits
No commits in common. "005e655daf563e90b1bbb7ba39aa9e27d387a0ac" and "0b2dc35cad012a3485e929b5df1755717d6a305d" have entirely different histories.
005e655daf
...
0b2dc35cad
@ -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)
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user