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