File tree Expand file tree Collapse file tree 3 files changed +34
-9
lines changed
Expand file tree Collapse file tree 3 files changed +34
-9
lines changed Original file line number Diff line number Diff 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+
228257fn main ( ) {
229258 println ! ( "cargo::rerun-if-changed=build.rs" ) ;
230259
231260 write_day21 ( ) ;
261+ // write_day22();
232262}
Original file line number Diff line number Diff line change 11use core:: str;
2+ use std:: mem:: transmute;
23
34use aoc_runner_derive:: aoc;
45
56const 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) ]
1111pub 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;
You can’t perform that action at this time.
0 commit comments