Skip to content

Commit 15a5430

Browse files
committed
Is this even faster?
1 parent 98970e6 commit 15a5430

File tree

1 file changed

+23
-31
lines changed

1 file changed

+23
-31
lines changed

src/day23.rs

Lines changed: 23 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -15,53 +15,45 @@ const MAX_C: usize = 13;
1515
pub fn part1(s: &str) -> u64 {
1616
let s = s.as_bytes();
1717

18-
let mut connections = [const { heapless::Vec::<u16, 16>::new() }; MAX];
18+
let mut g = BitArray::<[u64; BAL]>::default();
19+
20+
let mut connections = heapless::Vec::<(u16, u16), 3380>::new();
21+
1922
unsafe {
2023
let mut i = 0;
2124
while i < s.len() {
2225
let cp1 =
2326
(s.get_unchecked(i) - b'a') as u16 * 26 + (s.get_unchecked(i + 1) - b'a') as u16;
2427
let cp2 = (s.get_unchecked(i + 3) - b'a') as u16 * 26
2528
+ (s.get_unchecked(i + 4) - b'a') as u16;
26-
let cp1 = (cp1 + T_START_REM) % MAX as u16;
27-
let cp2 = (cp2 + T_START_REM) % MAX as u16;
2829

29-
connections
30-
.get_unchecked_mut(cp1 as usize)
31-
.push_unchecked(cp2);
32-
connections
33-
.get_unchecked_mut(cp2 as usize)
34-
.push_unchecked(cp1);
30+
connections.push_unchecked((cp1, cp2));
31+
g.set(cp2 as usize * MAX + cp1 as usize, true);
32+
g.set(cp1 as usize * MAX + cp2 as usize, true);
3533

3634
i += 6;
3735
}
3836

39-
// println!(
40-
// "{}{}:",
41-
// ((c / 26) as u8 + b'a') as char,
42-
// ((c % 26) as u8 + b'a') as char,
43-
// );
44-
4537
let mut sum = 0;
46-
for c in 0..26 {
47-
for con in connections.get_unchecked(c as usize) {
48-
if *con < c {
49-
continue;
50-
}
51-
for concon in connections.get_unchecked(*con as usize) {
52-
if *concon < *con {
53-
continue;
54-
}
55-
for conconcon in connections.get_unchecked(*concon as usize) {
56-
if *conconcon == c {
57-
sum += 1;
58-
break;
59-
}
60-
}
38+
for (a, b) in connections {
39+
for i in T_START..T_START + 26 {
40+
if *g.get_unchecked(a as usize * MAX + i as usize)
41+
&& *g.get_unchecked(b as usize * MAX + i as usize)
42+
{
43+
println!(
44+
"{}{},{}{},{}{}",
45+
((a / 26) as u8 + b'a') as char,
46+
((a % 26) as u8 + b'a') as char,
47+
((b / 26) as u8 + b'a') as char,
48+
((b % 26) as u8 + b'a') as char,
49+
((i / 26) as u8 + b'a') as char,
50+
((i % 26) as u8 + b'a') as char,
51+
);
52+
53+
sum += 1;
6154
}
6255
}
6356
}
64-
6557
sum
6658
}
6759
}

0 commit comments

Comments
 (0)