Skip to content

Commit fd3fad0

Browse files
committed
Use better system
1 parent 57340e3 commit fd3fad0

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

src/day22.rs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use core::str;
22

33
use aoc_runner_derive::aoc;
4-
use bitvec::array::BitArray;
54

65
const MAX: u32 = 16777216;
76

@@ -51,18 +50,19 @@ pub fn part1(s: &str) -> u64 {
5150
sum
5251
}
5352

54-
const SEQUENCES: usize = 18 << 15 | 18 << 10 | 18 << 5 | 18;
53+
const SEQUENCES: usize = 18 * 18 * 18 * 18;
5554

5655
#[aoc(day22, part2)]
5756
pub fn part2(s: &str) -> i16 {
5857
let s = s.as_bytes();
5958

6059
let mut sequences = [0; SEQUENCES];
61-
let mut done = BitArray::<[usize; SEQUENCES.div_ceil(usize::BITS as usize)]>::default();
60+
let mut done = [0u16; SEQUENCES];
6261

6362
let mut current_best = 0;
6463

6564
let mut i = 0;
65+
let mut monky = 1;
6666
unsafe {
6767
while i < s.len() {
6868
#[cfg(not(test))]
@@ -95,7 +95,7 @@ pub fn part2(s: &str) -> i16 {
9595
sn = ((sn as u64 * 2048) % MAX as u64) as u32 ^ sn;
9696
let price = sn % 10;
9797
let diff = price + 9 - prev;
98-
diffs = (diffs << 5) | diff;
98+
diffs = diffs * 18 + diff;
9999

100100
prev = price;
101101
}
@@ -106,19 +106,20 @@ pub fn part2(s: &str) -> i16 {
106106
sn = ((sn as u64 * 2048) % MAX as u64) as u32 ^ sn;
107107
let price = sn % 10;
108108
let diff = price + 9 - prev;
109-
diffs = ((diffs << 5) | diff) & 0xFFFFF;
109+
diffs = (diffs * 18 + diff) % SEQUENCES as u32;
110110

111-
if !done[diffs as usize] {
111+
if done[diffs as usize] != monky {
112112
sequences[diffs as usize] += price as i16;
113113
if current_best < sequences[diffs as usize] {
114114
current_best = sequences[diffs as usize];
115115
}
116-
done.set(diffs as usize, true);
116+
117+
done[diffs as usize] = monky;
117118
}
118119

119120
prev = price;
120121
}
121-
done.fill(false);
122+
monky += 1;
122123
}
123124
}
124125

0 commit comments

Comments
 (0)