Skip to content

Commit 1da4029

Browse files
committed
Use other id system
1 parent 569c68f commit 1da4029

File tree

1 file changed

+21
-18
lines changed

1 file changed

+21
-18
lines changed

src/day19.rs

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,23 @@
11
use aoc_runner_derive::aoc;
22

3-
// Transforms b, g, r, u ,w to 0, 1, 4, 3, 5
3+
const ID_LUT: [usize; 127] = const {
4+
let mut lut = [0; 127];
5+
6+
lut[b'b' as usize] = 0;
7+
lut[b'g' as usize] = 1;
8+
lut[b'r' as usize] = 2;
9+
lut[b'u' as usize] = 3;
10+
lut[b'w' as usize] = 4;
11+
12+
lut
13+
};
14+
15+
// Transforms b, g, r, u ,w to 0, 1, 4, 3, 5 NOT
16+
17+
// Transforms b, g, r, u ,w to 0, 1, 2, 3, 4
418
#[inline(always)]
519
fn to_idx(i: u8) -> usize {
6-
let o: usize;
7-
unsafe {
8-
std::arch::asm!(
9-
"mov {o:e}, 19",
10-
"pext {o:e}, {i:e}, {o:e}",
11-
"add {o:r}, -2",
12-
i = in(reg) i as u32,
13-
o = out(reg) o,
14-
options(pure, nomem, nostack)
15-
);
16-
}
17-
o
20+
unsafe { *ID_LUT.get_unchecked(i as usize) }
1821
}
1922

2023
#[derive(Debug, Copy, Clone)]
@@ -64,8 +67,8 @@ pub fn part1(s: &str) -> u64 {
6467

6568
// #[target_feature(enable = "avx2,bmi1,bmi2,cmpxchg16b,lzcnt,movbe,popcnt")]
6669
fn inner_part1(s: &[u8]) -> u64 {
67-
let mut nfa = heapless::Vec::<[NfaTrans; 6], NFA_SIZE>::new();
68-
nfa.push([NfaTrans::None; 6]).unwrap();
70+
let mut nfa = heapless::Vec::<[NfaTrans; 5], NFA_SIZE>::new();
71+
nfa.push([NfaTrans::None; 5]).unwrap();
6972

7073
let mut i = 0;
7174
let mut nfa_node = 0;
@@ -85,7 +88,7 @@ fn inner_part1(s: &[u8]) -> u64 {
8588
let mut nfa_trans = nfa[nfa_node][color];
8689
let next_nfa_node = nfa_trans.add_or_foolow(|| {
8790
let new_nfa_node = nfa.len();
88-
nfa.push([NfaTrans::None; 6]).unwrap();
91+
nfa.push([NfaTrans::None; 5]).unwrap();
8992
new_nfa_node
9093
});
9194
nfa[nfa_node][color] = nfa_trans;
@@ -170,8 +173,8 @@ pub fn part2(s: &str) -> u64 {
170173

171174
// #[target_feature(enable = "avx2,bmi1,bmi2,cmpxchg16b,lzcnt,movbe,popcnt")]
172175
fn inner_part2(s: &[u8]) -> u64 {
173-
let mut nfa = heapless::Vec::<[NfaTrans; 6], NFA_SIZE>::new();
174-
nfa.push([NfaTrans::None; 6]).unwrap();
176+
let mut nfa = heapless::Vec::<[NfaTrans; 5], NFA_SIZE>::new();
177+
nfa.push([NfaTrans::None; 5]).unwrap();
175178

176179
let mut i = 0;
177180
let mut nfa_node = 0;

0 commit comments

Comments
 (0)