heh
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 49 |
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() { |