@@ -2,7 +2,7 @@ use fxhash::FxHashMap as HashMap;
22
33use aoc_runner_derive:: aoc;
44
5- const LUT_SIZE : u64 = 10000 ;
5+ const LUT_SIZE : u64 = 100 ;
66
77const LUT : [ u64 ; LUT_SIZE as usize ] = const {
88 let mut lut = [ 0 ; LUT_SIZE as usize ] ;
@@ -49,18 +49,18 @@ fn amount_of_stones(num: u64, blinks_left: u64, cach: &mut HashMap<(u64, u64), u
4949 if let Some ( r) = cach. get ( & ( num, blinks_left) ) {
5050 return * r;
5151 }
52- const { assert ! ( LUT_SIZE == 10000 ) } ;
52+ const { assert ! ( LUT_SIZE == 100 ) } ;
5353 let r = match num {
5454 0 => amount_of_stones ( 1 , blinks_left - 1 , cach) ,
5555 1 ..=9 => amount_of_stones ( num * 2024 , blinks_left - 1 , cach) ,
5656 10 ..=99 => {
57- // let r = LUT[num as usize];
58- // println!(
59- // "{} -> {} and {}",
60- // num,
61- // r & (2u64.pow(32) - 1),
62- // (r >> 32) & (2u64.pow(32) - 1)
63- // );
57+ let r = LUT [ num as usize ] ;
58+ println ! (
59+ "{} -> {} and {}" ,
60+ num,
61+ r & ( 2u64 . pow( 32 ) - 1 ) ,
62+ ( r >> 32 ) & ( 2u64 . pow( 32 ) - 1 )
63+ ) ;
6464 // amount_of_stones(r & (2u64.pow(32) - 1), blinks_left - 1, cach)
6565 // + amount_of_stones((r >> 32) & (2u64.pow(32) - 1), blinks_left - 1, cach)
6666 amount_of_stones ( num / 10 , blinks_left - 1 , cach)
@@ -70,9 +70,6 @@ fn amount_of_stones(num: u64, blinks_left: u64, cach: &mut HashMap<(u64, u64), u
7070 1000 ..=9999 => {
7171 amount_of_stones ( num / 100 , blinks_left - 1 , cach)
7272 + amount_of_stones ( num % 100 , blinks_left - 1 , cach)
73- // let r = LUT[num as usize];
74- // amount_of_stones(r & (2u64.pow(32) - 1), blinks_left - 1, cach)
75- // + amount_of_stones((r >> 32) & (2u64.pow(32) - 1), blinks_left - 1, cach)
7673 }
7774 10000 ..=99999 => amount_of_stones ( num * 2024 , blinks_left - 1 , cach) ,
7875 100000 ..=999999 => {
0 commit comments