Skip to content

Commit

Permalink
Use jump table
Browse files Browse the repository at this point in the history
  • Loading branch information
EbbDrop committed Dec 22, 2024
1 parent 276f75b commit c8f5182
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 29 deletions.
44 changes: 21 additions & 23 deletions build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -225,38 +225,36 @@ fn write_day21() {
file.write_all(&lut).unwrap();
}

// #[allow(unused)]
// fn write_day22() {
// const MAX: u32 = 16777216;
#[allow(unused)]
fn write_day22() {
const MAX: u32 = 16777216;

// let mut lut = Vec::with_capacity(MAX as usize);
let mut lut = Vec::with_capacity(MAX as usize);

// for i in 0..MAX {
// let mut sn = i;
// for _ in 0..2000 {
// sn = ((sn as u64 * 64) % MAX as u64) as u32 ^ sn;
// sn = (sn / 32) ^ sn;
// sn = ((sn as u64 * 2048) % MAX as u64) as u32 ^ sn;
// }
for i in 0..MAX {
let mut sn = i;
sn = ((sn as u64 * 64) % MAX as u64) as u32 ^ sn;
sn = (sn / 32) ^ sn;
sn = ((sn as u64 * 2048) % MAX as u64) as u32 ^ sn;

// lut.push(sn);
// }
lut.push(sn);
}

// let lut: Box<[u32; MAX as usize]> = lut.into_boxed_slice().try_into().unwrap();
// let mut lut = std::mem::ManuallyDrop::new(lut);
// let lut: Box<[u8; 4 * MAX as usize]> = unsafe { Box::from_raw(lut.as_mut_ptr().cast()) };
let lut: Box<[u32; MAX as usize]> = lut.into_boxed_slice().try_into().unwrap();
let mut lut = std::mem::ManuallyDrop::new(lut);
let lut: Box<[u8; 4 * MAX as usize]> = unsafe { Box::from_raw(lut.as_mut_ptr().cast()) };

// let mut path = PathBuf::from(std::env::var("OUT_DIR").unwrap());
// path.push("day22.bin");
// let mut file = File::create(&path).unwrap();
let mut path = PathBuf::from(std::env::var("OUT_DIR").unwrap());
path.push("day22_jmp.bin");
let mut file = File::create(&path).unwrap();

// file.write_all(lut.as_slice()).unwrap();
// println!("{}", path.display());
// }
file.write_all(lut.as_slice()).unwrap();
println!("{}", path.display());
}

fn main() {
println!("cargo::rerun-if-changed=build.rs");

write_day21();
// write_day22();
write_day22();
}
11 changes: 5 additions & 6 deletions src/day22.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@ pub fn part1(s: &str) -> u64 {
sum
}

static JMP_TBL: [u32; MAX as usize] =
unsafe { transmute(*include_bytes!(concat!(env!("OUT_DIR"), "/day22_jmp.bin"))) };

const SEQUENCES: usize = 18 * 18 * 18 * 18;

#[aoc(day22, part2)]
Expand Down Expand Up @@ -83,9 +86,7 @@ pub fn part2(s: &str) -> i16 {
let mut prev = sn % 10;

for _ in 0..3 {
sn = ((sn as u64 * 64) % MAX as u64) as u32 ^ sn;
sn = (sn / 32) ^ sn;
sn = ((sn as u64 * 2048) % MAX as u64) as u32 ^ sn;
sn = JMP_TBL[sn as usize];
let price = sn % 10;
let diff = price + 9 - prev;
diffs = diffs * 18 + diff;
Expand All @@ -94,9 +95,7 @@ pub fn part2(s: &str) -> i16 {
}

for _ in 4..2000 {
sn = ((sn as u64 * 64) % MAX as u64) as u32 ^ sn;
sn = (sn / 32) ^ sn;
sn = ((sn as u64 * 2048) % MAX as u64) as u32 ^ sn;
sn = JMP_TBL[sn as usize];
let price = sn % 10;
let diff = price + 9 - prev;
diffs = (diffs * 18 + diff) % SEQUENCES as u32;
Expand Down

0 comments on commit c8f5182

Please sign in to comment.