@@ -15,7 +15,10 @@ 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 ( ) {
@@ -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