@@ -15,45 +15,53 @@ 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 ( ) {
2522 let cp1 =
2623 ( s. get_unchecked ( i) - b'a' ) as u16 * 26 + ( s. get_unchecked ( i + 1 ) - b'a' ) as u16 ;
2724 let cp2 = ( s. get_unchecked ( i + 3 ) - b'a' ) as u16 * 26
2825 + ( 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 ;
2928
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 ) ;
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) ;
3335
3436 i += 6 ;
3537 }
3638
39+ // println!(
40+ // "{}{}:",
41+ // ((c / 26) as u8 + b'a') as char,
42+ // ((c % 26) as u8 + b'a') as char,
43+ // );
44+
3745 let mut sum = 0 ;
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 ;
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+ }
5461 }
5562 }
5663 }
64+
5765 sum
5866 }
5967}
0 commit comments