heh
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs43
1 files changed, 15 insertions, 28 deletions
diff --git a/src/main.rs b/src/main.rs
index 9a24313..1298790 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,4 +1,5 @@
#![allow(
+ unexpected_cfgs,
confusable_idents,
uncommon_codepoints,
non_upper_case_globals,
@@ -41,7 +42,6 @@ pub mod util;
use atools::prelude::*;
use lower::apply;
-use md5::Digest;
use memchr::memmem;
use regex::bytes::Regex;
use std::{cmp::Reverse, simd::prelude::*};
@@ -50,38 +50,25 @@ pub use util::prelude::*;
#[allow(warnings)]
type u32x3 = Simd<u32, 3>;
-fn md5(x: &[u8]) -> [u8; 16] {
- let mut hasher = md5::Md5::new();
- hasher.update(x);
- *hasher.finalize().as_array::<16>().unwrap()
-}
-
-#[unsafe(no_mangle)]
-pub fn p1(_: &'static str) -> impl Display {
- (0..)
- .map(|n| md5(&format!("ojvtpuvg{n}").as_bytes()))
- .filter(|&[a, b, c, ..]| a == 0 && b == 0 && c >> 4 == 0)
- .map(|[_, _, x, ..]| b"0123456789abcdef"[(x & 0x0f).nat()] as char)
- .take(8)
- .collect::<String>()
-}
-
#[unsafe(no_mangle)]
-pub fn p2(_: &'static str) -> impl Display {
- let mut o = [0; 8];
- for [a, b, c, d, ..] in (0..).map(|n| md5(&format!("ojvtpuvg{n}").as_bytes())) {
- if a == 0 && b == 0 && c >> 4 == 0 && o.get((c & 0x0f) as usize) == Some(&0) {
- o[(c & 0x0f).nat()] = b"0123456789abcdef"[(d >> 4).nat()]
- }
- if o.iter().all(|x| *x != 0) {
- break;
- }
+pub unsafe fn p1(x: &'static str) -> impl Display {
+ let x = mattr::transpose_array(
+ *x.as_bytes()
+ .as_chunks_unchecked::<9>()
+ .as_array::<624>()
+ .ψ(),
+ );
+ unsafe {
+ String::from_utf8_unchecked(
+ x.into_iter()
+ .map(|x| *countmap(x.iter()).l().Δ())
+ .collect::<Vec<_>>(),
+ )
}
- o.str().to_owned()
}
fn main() {
- unsafe { println!("{}", p2(include_str!("inp.txt"))) };
+ unsafe { println!("{}", p1(include_str!("inp.txt"))) };
}
#[bench]