Skip to content

Commit 276f75b

Browse files
committed
Add day22 lut
1 parent 6d50dee commit 276f75b

File tree

3 files changed

+34
-9
lines changed

3 files changed

+34
-9
lines changed

build.rs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,8 +225,38 @@ fn write_day21() {
225225
file.write_all(&lut).unwrap();
226226
}
227227

228+
// #[allow(unused)]
229+
// fn write_day22() {
230+
// const MAX: u32 = 16777216;
231+
232+
// let mut lut = Vec::with_capacity(MAX as usize);
233+
234+
// for i in 0..MAX {
235+
// let mut sn = i;
236+
// for _ in 0..2000 {
237+
// sn = ((sn as u64 * 64) % MAX as u64) as u32 ^ sn;
238+
// sn = (sn / 32) ^ sn;
239+
// sn = ((sn as u64 * 2048) % MAX as u64) as u32 ^ sn;
240+
// }
241+
242+
// lut.push(sn);
243+
// }
244+
245+
// let lut: Box<[u32; MAX as usize]> = lut.into_boxed_slice().try_into().unwrap();
246+
// let mut lut = std::mem::ManuallyDrop::new(lut);
247+
// let lut: Box<[u8; 4 * MAX as usize]> = unsafe { Box::from_raw(lut.as_mut_ptr().cast()) };
248+
249+
// let mut path = PathBuf::from(std::env::var("OUT_DIR").unwrap());
250+
// path.push("day22.bin");
251+
// let mut file = File::create(&path).unwrap();
252+
253+
// file.write_all(lut.as_slice()).unwrap();
254+
// println!("{}", path.display());
255+
// }
256+
228257
fn main() {
229258
println!("cargo::rerun-if-changed=build.rs");
230259

231260
write_day21();
261+
// write_day22();
232262
}

day22_lut.bin

64 MB
Binary file not shown.

src/day22.rs

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
use core::str;
2+
use std::mem::transmute;
23

34
use aoc_runner_derive::aoc;
45

56
const MAX: u32 = 16777216;
67

7-
// static LUT_P1: [u32; MAX as usize] =
8-
// unsafe { transmute(*include_bytes!(concat!(env!("OUT_DIR"), "/day22.bin"))) };
8+
static LUT_P1: [u32; MAX as usize] = unsafe { transmute(*include_bytes!("../day22_lut.bin")) };
99

1010
#[aoc(day22, part1)]
1111
pub fn part1(s: &str) -> u64 {
@@ -37,13 +37,7 @@ pub fn part1(s: &str) -> u64 {
3737
}
3838
i += 1;
3939

40-
for _ in 0..2000 {
41-
sn = ((sn as u64 * 64) % MAX as u64) as u32 ^ sn;
42-
sn = (sn / 32) ^ sn;
43-
sn = ((sn as u64 * 2048) % MAX as u64) as u32 ^ sn;
44-
}
45-
46-
sum += sn as u64;
40+
sum += LUT_P1[sn as usize] as u64;
4741
}
4842
}
4943

@@ -87,6 +81,7 @@ pub fn part2(s: &str) -> i16 {
8781

8882
let mut diffs = 0;
8983
let mut prev = sn % 10;
84+
9085
for _ in 0..3 {
9186
sn = ((sn as u64 * 64) % MAX as u64) as u32 ^ sn;
9287
sn = (sn / 32) ^ sn;

0 commit comments

Comments
 (0)