Diffstat (limited to 'src/lib.rs')
| -rw-r--r-- | src/lib.rs | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..f7b7574 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,73 @@ +#![allow( + confusable_idents, + uncommon_codepoints, + non_upper_case_globals, + internal_features, + mixed_script_confusables, + incomplete_features +)] +#![feature( + slice_swap_unchecked, + generic_const_exprs, + iter_array_chunks, + get_many_mut, + maybe_uninit_uninit_array, + iter_collect_into, + let_chains, + anonymous_lifetime_in_impl_trait, + array_windows, + slice_take, + test, + slice_as_chunks, + array_chunks, + slice_split_once, + core_intrinsics +)] +mod util; +pub mod day1 { + use crate::util::prelude::*; + pub fn part1(input: &str) -> impl std::fmt::Display { + static mut a: [u32; 1000] = [0; 1000]; + static mut b: [u32; 1000] = [0; 1000]; + + input + .行() + .map(crate::util::nail::<{ 5 + 5 + 3 }>) + .map(|x| (reading::all(&x[0..5]), reading::all(&x[8..13]))) + .enumerate() + .for_each(|(i, (x, y))| { + C! { a[i] = x }; + C! { b[i] = y }; + }); + unsafe { + a.sort_unstable(); + b.sort_unstable(); + a.iter() + .copied() + .zip(b) + .map(|(x, y)| (x as i32 - y as i32).abs() as u32) + .sum::<u32>() + } + } + + pub fn part2(i: &str) -> impl Display { + static mut a: [u32; 1000] = [0; 1000]; + let mut map = HashMap::<u32, u32>::with_capacity_and_hasher( + 1000, + rustc_hash::FxBuildHasher::default(), + ); + i.行() + .map(crate::util::nail::<{ 5 + 5 + 3 }>) + .map(|x| (reading::all(&x[0..5]), reading::all(&x[8..13]))) + .enumerate() + .for_each(|(i, (x, y))| { + C! { a[i] = x }; + map.entry(y).and_modify(|x| *x += 1).or_insert(1); + }); + unsafe { + a.iter() + .map(|x| x * map.get(x).copied().unwrap_or(0)) + .sum::<u32>() + } + } +} |