Skip to content

Commit 7bcbe4f

Browse files
committed
Go back to fastest version
1 parent f35c508 commit 7bcbe4f

File tree

1 file changed

+29
-17
lines changed

1 file changed

+29
-17
lines changed

src/day23.rs

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

18-
let mut g = BitArray::<[u64; BAL]>::default();
19-
20-
let mut connections = heapless::Vec::<(u16, u16), 3380>::new();
21-
18+
let mut connections = [const { heapless::Vec::<u16, 16>::new() }; MAX];
2219
unsafe {
2320
let mut i = 0;
2421
while i < s.len() {
@@ -29,27 +26,42 @@ pub fn part1(s: &str) -> u64 {
2926
let cp1 = (cp1 + T_START_REM) % MAX as u16;
3027
let cp2 = (cp2 + T_START_REM) % MAX as u16;
3128

32-
if *s.get_unchecked(i) == b't' {
33-
connections.push_unchecked((cp1, cp2));
34-
} else if *s.get_unchecked(i + 3) == b't' {
35-
connections.push_unchecked((cp2, cp1));
36-
}
37-
g.set(cp2 as usize * MAX + cp1 as usize, true);
38-
g.set(cp1 as usize * MAX + cp2 as usize, true);
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);
3935

4036
i += 6;
4137
}
4238

39+
// println!(
40+
// "{}{}:",
41+
// ((c / 26) as u8 + b'a') as char,
42+
// ((c % 26) as u8 + b'a') as char,
43+
// );
44+
4345
let mut sum = 0;
44-
for (a, b) in connections {
45-
for i in b as usize..MAX {
46-
if *g.get_unchecked(a as usize * MAX + i as usize)
47-
&& *g.get_unchecked(b as usize * MAX + i as usize)
48-
{
49-
sum += 1;
46+
for c in 0..26 {
47+
for con in &connections[c as usize] {
48+
if *con < c {
49+
continue;
50+
}
51+
for concon in &connections[*con as usize] {
52+
if *concon < *con {
53+
continue;
54+
}
55+
for conconcon in &connections[*concon as usize] {
56+
if *conconcon == c {
57+
sum += 1;
58+
break;
59+
}
60+
}
5061
}
5162
}
5263
}
64+
5365
sum
5466
}
5567
}

0 commit comments

Comments
 (0)