Skip to content

Commit f39c6f4

Browse files
committed
Maybe good?
1 parent 7ef9800 commit f39c6f4

File tree

1 file changed

+27
-29
lines changed

1 file changed

+27
-29
lines changed

src/day23.rs

Lines changed: 27 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@ 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() {
@@ -26,42 +29,37 @@ pub fn part1(s: &str) -> u64 {
2629
let cp1 = (cp1 + T_START_REM) % MAX as u16;
2730
let cp2 = (cp2 + T_START_REM) % MAX as u16;
2831

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);
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);
3539

3640
i += 6;
3741
}
3842

39-
// println!(
40-
// "{}{}:",
41-
// ((c / 26) as u8 + b'a') as char,
42-
// ((c % 26) as u8 + b'a') as char,
43-
// );
44-
4543
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-
}
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+
println!(
50+
"{}{},{}{},{}{}",
51+
((a / 26) as u8 + b'a') as char,
52+
((a % 26) as u8 + b'a') as char,
53+
((b / 26) as u8 + b'a') as char,
54+
((b % 26) as u8 + b'a') as char,
55+
((i / 26) as u8 + b'a') as char,
56+
((i % 26) as u8 + b'a') as char,
57+
);
58+
59+
sum += 1;
6160
}
6261
}
6362
}
64-
6563
sum
6664
}
6765
}

0 commit comments

Comments
 (0)