Skip to content

Commit 98cf199

Browse files
committed
Use static map
1 parent 7acf9e2 commit 98cf199

File tree

1 file changed

+17
-17
lines changed

1 file changed

+17
-17
lines changed

src/day10.rs

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,15 @@ pub fn part1(s: &str) -> u32 {
88
unsafe { part1_inner(s) }
99
}
1010

11+
static mut MAPS_PART1: [[u64; BIG_SIZE]; 9] = [[0; BIG_SIZE]; 9];
12+
static mut MAPS_PART2: [[u16; BIG_SIZE]; 9] = [[0; BIG_SIZE]; 9];
13+
1114
#[target_feature(enable = "avx2,bmi1,bmi2,cmpxchg16b,lzcnt,movbe,popcnt")]
1215
unsafe fn part1_inner(s: &str) -> u32 {
1316
let s = s.as_bytes();
1417

1518
let mut positions = [(0u16, [0u16; MAX_SIZE * MAX_SIZE / 9]); 9];
16-
let mut maps = [[0u64; BIG_SIZE]; 9];
19+
let maps = &mut MAPS_PART1;
1720
let mut zero_pos = 0;
1821

1922
let mut y = 0;
@@ -82,7 +85,7 @@ unsafe fn part2_inner(s: &str) -> u16 {
8285
let s = s.as_bytes();
8386

8487
let mut positions = [(0u16, [0u16; MAX_SIZE * MAX_SIZE / 9]); 9];
85-
let mut first_map = [0u16; BIG_SIZE];
88+
let mut maps = &mut MAPS_PART2;
8689

8790
let mut y = 0;
8891
let mut x = 0;
@@ -96,7 +99,9 @@ unsafe fn part2_inner(s: &str) -> u16 {
9699

97100
let layer = (c - b'0') as usize;
98101
if layer == 0 {
99-
*first_map.get_unchecked_mut(y * MAX_SIZE + x + MAX_SIZE) = 1;
102+
*maps
103+
.get_unchecked_mut(0)
104+
.get_unchecked_mut(y * MAX_SIZE + x + MAX_SIZE) = 1;
100105
} else {
101106
let len = positions.get_unchecked(layer - 1).0 as usize;
102107
*positions
@@ -110,31 +115,26 @@ unsafe fn part2_inner(s: &str) -> u16 {
110115

111116
let mut sum = 0;
112117

113-
let mut next = &mut [0u16; BIG_SIZE];
114-
let mut current = &mut first_map;
115-
116118
for layer in 0..8 {
117119
let (len, positions) = *positions.get_unchecked(layer);
118120

119121
for i in &*positions.get_unchecked(..len as usize) {
120122
let i = *i as usize;
121-
*next.get_unchecked_mut(i) = *current.get_unchecked(i - 1)
122-
+ *current.get_unchecked(i + 1)
123-
+ *current.get_unchecked(i + MAX_SIZE)
124-
+ *current.get_unchecked(i - MAX_SIZE);
123+
*maps.get_unchecked_mut(layer + 1).get_unchecked_mut(i) =
124+
*maps.get_unchecked_mut(layer).get_unchecked(i - 1)
125+
+ *maps.get_unchecked_mut(layer).get_unchecked(i + 1)
126+
+ *maps.get_unchecked_mut(layer).get_unchecked(i + MAX_SIZE)
127+
+ *maps.get_unchecked_mut(layer).get_unchecked(i - MAX_SIZE);
125128
}
126-
127-
std::mem::swap(&mut current, &mut next);
128-
next.fill(0);
129129
}
130130

131131
let (len9, positions9) = *positions.get_unchecked(8);
132132
for i in &positions9[..len9 as usize] {
133133
let i = *i as usize;
134-
sum += *current.get_unchecked(i - 1)
135-
+ *current.get_unchecked(i + 1)
136-
+ *current.get_unchecked(i + MAX_SIZE)
137-
+ *current.get_unchecked(i - MAX_SIZE);
134+
sum += *maps.get_unchecked_mut(8).get_unchecked(i - 1)
135+
+ *maps.get_unchecked_mut(8).get_unchecked(i + 1)
136+
+ *maps.get_unchecked_mut(8).get_unchecked(i + MAX_SIZE)
137+
+ *maps.get_unchecked_mut(8).get_unchecked(i - MAX_SIZE);
138138
}
139139

140140
sum

0 commit comments

Comments
 (0)