heh
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs49
1 files changed, 14 insertions, 35 deletions
diff --git a/src/main.rs b/src/main.rs
index 60c0c6c..fef3558 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -69,42 +69,21 @@ pub use util::prelude::*;
#[unsafe(no_mangle)]
#[implicit_fn::implicit_fn]
pub unsafe fn p1(x: &'static [u8; ISIZE]) -> impl Debug {
- // let lengths = util::ints(x).map(_ as usize).collect::<Vec<_>>();
- let lengths = x.map(_ as usize).couple([17, 31, 73, 47, 23]);
-
- let mut x = range::<256>();
- let mut c = 0;
- let mut s = 0;
-
- for _ in 0..64 {
- for &l in &lengths {
- if (c + l) > 256 {
- let mut i = x
- .into_iter()
- .cycle()
- .skip(c)
- .take(l)
- .collect::<Vec<_>>()
- .into_iter()
- .rev();
- x.get_mut(c..(c + l).min(256))
- .map(|s| s.copy_from_slice(&i.by_ref().take(s.len()).collect::<Vec<_>>()));
- x[..c + l - 256].copy_from_slice(&i.by_ref().take(c + l - 256).collect::<Vec<_>>());
- assert_eq!(i.collect::<Vec<_>>(), &[]);
- } else {
- x.get_mut(c..(c + l).min(256)).map(_.reverse());
- }
-
- c += l + s;
- c %= 256;
- s += 1;
- }
+ let mut p = [0, 0];
+ let mut max = 0;
+ for i in x.μₙ(b',') {
+ use util::hexagon::*;
+ p = p.aadd(mat! { i {
+ b"n" => n, // 0, -1
+ b"ne" => ne, // +1, -1
+ b"se" => se, // +1, 0
+ b"s" => s, // 0, +1
+ b"sw" => sw, // -1, +1
+ b"nw" => nw, // -1, 0
+ }});
+ max = max.max(util::hexagon::distance(p, [0, 0]))
}
-
- x.chunked::<16>()
- .map(|x| x.into_iter().reduce(_ ^ _).ψ())
- .into_iter()
- .fold(String::default(), |a, b| format!("{a}{b:02x}"))
+ max
}
const ISIZE: usize = include_bytes!("inp.txt").len();
fn main() {