Skip to content

Commit 3abe2fa

Browse files
committed
Double big lut size
1 parent 1dcc544 commit 3abe2fa

File tree

2 files changed

+21
-10
lines changed

2 files changed

+21
-10
lines changed

build.rs

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -99,24 +99,35 @@ fn amount_of_stones(num: u64, blinks_left: u64, cach: &mut HashMap<(u64, u64), u
9999

100100
#[repr(C, align(8))]
101101
#[derive(Clone, Copy)]
102-
struct AlignSlice([u8; 8_000_000]);
102+
struct AlignSlice([u8; 16_000_000]);
103103

104104
unsafe impl Zeroable for AlignSlice {}
105105
unsafe impl Pod for AlignSlice {}
106106

107+
fn array_of_default<T: Default, const N: usize>() -> Box<[T; N]> {
108+
let mut vec = vec![];
109+
vec.resize_with(N, T::default);
110+
let boxed: Box<[T; N]> = match vec.into_boxed_slice().try_into() {
111+
Ok(boxed) => boxed,
112+
Err(_) => unreachable!(),
113+
};
114+
115+
boxed
116+
}
117+
107118
fn main() {
108119
// Never rerun
109120
println!("cargo::rerun-if-changed=build.rs");
110121

111-
let mut big_lut75 = Box::new([0u64; 1_000_000]);
112-
let mut big_lut25 = Box::new([0u64; 1_000_000]);
122+
let mut big_lut75: Box<[u64; 2_000_000]> = array_of_default();
123+
let mut big_lut25: Box<[u64; 2_000_000]> = array_of_default();
113124

114125
let mut cach = HashMap::default();
115-
for i in 0..1_000_000u64 {
126+
for i in 0..2_000_000u64 {
116127
big_lut25[i as usize] = amount_of_stones(i, 25, &mut cach);
117128
}
118129
let mut cach = HashMap::default();
119-
for i in 0..1_000_000u64 {
130+
for i in 0..2_000_000u64 {
120131
big_lut75[i as usize] = amount_of_stones(i, 75, &mut cach);
121132
}
122133

src/day11.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ use fxhash::FxHashMap as HashMap;
44

55
#[repr(C, align(8))]
66
#[derive(Clone, Copy)]
7-
struct AlignSlice([u8; 8_000_000]);
7+
struct AlignSlice([u8; 16_000_000]);
88

99
unsafe impl Zeroable for AlignSlice {}
1010
unsafe impl Pod for AlignSlice {}
1111

12-
const BIG_LUT25: &AlignSlice =
12+
static BIG_LUT25: &AlignSlice =
1313
&AlignSlice(*include_bytes!(concat!(env!("OUT_DIR"), "/big_lut25.bin")));
14-
const BIG_LUT75: &AlignSlice =
14+
static BIG_LUT75: &AlignSlice =
1515
&AlignSlice(*include_bytes!(concat!(env!("OUT_DIR"), "/big_lut75.bin")));
1616

1717
const LUT_SIZE: u64 = 100;
@@ -110,7 +110,7 @@ fn amount_of_stones(num: u64, blinks_left: u64, cach: &mut HashMap<(u64, u64), u
110110

111111
#[aoc(day11, part1)]
112112
pub fn part1(s: &str) -> u64 {
113-
let big_lut: &[u64; 1_000_000] = cast_ref(BIG_LUT25);
113+
let big_lut: &[u64; 2_000_000] = cast_ref(BIG_LUT25);
114114

115115
let s = s.as_bytes();
116116

@@ -138,7 +138,7 @@ pub fn part1(s: &str) -> u64 {
138138

139139
#[aoc(day11, part2)]
140140
pub fn part2(s: &str) -> u64 {
141-
let big_lut: &[u64; 1_000_000] = cast_ref(BIG_LUT75);
141+
let big_lut: &[u64; 2_000_000] = cast_ref(BIG_LUT75);
142142

143143
let s = s.as_bytes();
144144

0 commit comments

Comments
 (0)