@@ -8,7 +8,12 @@ pub fn part1(s: &str) -> u64 {
88 unsafe { part1_inner ( s) }
99}
1010
11- const DS : usize = 6 * 7 + 1 ;
11+ #[ cfg( not( test) ) ]
12+ const SIZE : usize = 500 ;
13+ #[ cfg( test) ]
14+ const SIZE : usize = 5 ;
15+
16+ const DS : usize = 7 * 6 + 1 ;
1217
1318#[ inline( always) ]
1419unsafe fn part1_inner ( s : & [ u8 ] ) -> u64 {
@@ -17,8 +22,8 @@ unsafe fn part1_inner(s: &[u8]) -> u64 {
1722 let mut keys = heapless:: Vec :: < u16 , 512 > :: new ( ) ;
1823 let mut holes = heapless:: Vec :: < u16 , 512 > :: new ( ) ;
1924
20- let mut i = 0 ;
21- while i < s . len ( ) {
25+ for i in 0 .. SIZE {
26+ let i = i * DS ;
2227 let is_key = * s. get_unchecked ( i) == b'.' ;
2328
2429 let d = s
@@ -61,27 +66,13 @@ unsafe fn part1_inner(s: &[u8]) -> u64 {
6166 ) ;
6267 let collisions = _mm256_movemask_epi8 ( collisions) ;
6368 sum += ( collisions == 0 ) as u64 ;
64-
65- // let mut fd = [0u8; 256 / 8];
66- // fd.as_mut_ptr().cast::<__m256i>().write_unaligned(d);
67- // println!("{:?}", String::from_utf8_lossy(&fd));
68- // let mut fo = [0u8; 256 / 8];
69- // fo.as_mut_ptr().cast::<__m256i>().write_unaligned(o);
70- // println!("{:?}", String::from_utf8_lossy(&fo));
71- // let mut fsum = [0u8; 256 / 8];
72- // fsum.as_mut_ptr()
73- // .cast::<__m256i>()
74- // .write_unaligned(collisions);
75- // println!("{:?}", &fsum);
7669 }
7770
7871 if is_key {
7972 keys. push_unchecked ( i as u16 ) ;
8073 } else {
8174 holes. push_unchecked ( i as u16 ) ;
8275 }
83-
84- i += DS ;
8576 }
8677
8778 sum
0 commit comments