@@ -15,10 +15,7 @@ const MAX_C: usize = 13;
1515pub 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