Skip to content

Commit 7acf9e2

Browse files
committed
Use one big map in part 1
1 parent 30397ee commit 7acf9e2

File tree

1 file changed

+13
-16
lines changed

1 file changed

+13
-16
lines changed

src/day10.rs

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ unsafe fn part1_inner(s: &str) -> u32 {
1313
let s = s.as_bytes();
1414

1515
let mut positions = [(0u16, [0u16; MAX_SIZE * MAX_SIZE / 9]); 9];
16-
let mut first_map = [0u64; BIG_SIZE];
16+
let mut maps = [[0u64; BIG_SIZE]; 9];
1717
let mut zero_pos = 0;
1818

1919
let mut y = 0;
@@ -28,7 +28,9 @@ unsafe fn part1_inner(s: &str) -> u32 {
2828

2929
let layer = (c - b'0') as usize;
3030
if layer == 0 {
31-
*first_map.get_unchecked_mut(y * MAX_SIZE + x + MAX_SIZE) = 1 << zero_pos;
31+
*maps
32+
.get_unchecked_mut(0)
33+
.get_unchecked_mut(y * MAX_SIZE + x + MAX_SIZE) = 1 << zero_pos;
3234
zero_pos += 1;
3335
zero_pos %= 64;
3436
} else {
@@ -44,31 +46,26 @@ unsafe fn part1_inner(s: &str) -> u32 {
4446

4547
let mut sum = 0;
4648

47-
let mut next = &mut [0u64; BIG_SIZE];
48-
let mut current = &mut first_map;
49-
5049
for layer in 0..8 {
5150
let (len, positions) = *positions.get_unchecked(layer);
5251

5352
for i in &*positions.get_unchecked(..len as usize) {
5453
let i = *i as usize;
55-
*next.get_unchecked_mut(i) = *current.get_unchecked(i - 1)
56-
| *current.get_unchecked(i + 1)
57-
| *current.get_unchecked(i + MAX_SIZE)
58-
| *current.get_unchecked(i - MAX_SIZE);
54+
*maps.get_unchecked_mut(layer + 1).get_unchecked_mut(i) =
55+
*maps.get_unchecked_mut(layer).get_unchecked(i - 1)
56+
| *maps.get_unchecked_mut(layer).get_unchecked(i + 1)
57+
| *maps.get_unchecked_mut(layer).get_unchecked(i + MAX_SIZE)
58+
| *maps.get_unchecked_mut(layer).get_unchecked(i - MAX_SIZE);
5959
}
60-
61-
std::mem::swap(&mut current, &mut next);
62-
next.fill(0);
6360
}
6461

6562
let (len9, positions9) = *positions.get_unchecked(8);
6663
for i in &positions9[..len9 as usize] {
6764
let i = *i as usize;
68-
sum += (*current.get_unchecked(i - 1)
69-
| *current.get_unchecked(i + 1)
70-
| *current.get_unchecked(i + MAX_SIZE)
71-
| *current.get_unchecked(i - MAX_SIZE))
65+
sum += (*maps.get_unchecked_mut(8).get_unchecked(i - 1)
66+
| *maps.get_unchecked_mut(8).get_unchecked(i + 1)
67+
| *maps.get_unchecked_mut(8).get_unchecked(i + MAX_SIZE)
68+
| *maps.get_unchecked_mut(8).get_unchecked(i - MAX_SIZE))
7269
.count_ones();
7370
}
7471

0 commit comments

Comments
 (0)