@@ -13,7 +13,7 @@ unsafe fn part1_inner(s: &str) -> u32 {
1313 let s = s. as_bytes ( ) ;
1414
1515 let mut positions = [ ( 0u16 , [ 0u16 ; MAX_SIZE * MAX_SIZE / 9 ] ) ; 9 ] ;
16- let mut first_map = [ 0u64 ; BIG_SIZE ] ;
16+ let mut maps = [ [ 0u64 ; BIG_SIZE ] ; 9 ] ;
1717 let mut zero_pos = 0 ;
1818
1919 let mut y = 0 ;
@@ -28,7 +28,9 @@ unsafe fn part1_inner(s: &str) -> u32 {
2828
2929 let layer = ( c - b'0' ) as usize ;
3030 if layer == 0 {
31- * first_map. get_unchecked_mut ( y * MAX_SIZE + x + MAX_SIZE ) = 1 << zero_pos;
31+ * maps
32+ . get_unchecked_mut ( 0 )
33+ . get_unchecked_mut ( y * MAX_SIZE + x + MAX_SIZE ) = 1 << zero_pos;
3234 zero_pos += 1 ;
3335 zero_pos %= 64 ;
3436 } else {
@@ -44,31 +46,26 @@ unsafe fn part1_inner(s: &str) -> u32 {
4446
4547 let mut sum = 0 ;
4648
47- let mut next = & mut [ 0u64 ; BIG_SIZE ] ;
48- let mut current = & mut first_map;
49-
5049 for layer in 0 ..8 {
5150 let ( len, positions) = * positions. get_unchecked ( layer) ;
5251
5352 for i in & * positions. get_unchecked ( ..len as usize ) {
5453 let i = * i as usize ;
55- * next. get_unchecked_mut ( i) = * current. get_unchecked ( i - 1 )
56- | * current. get_unchecked ( i + 1 )
57- | * current. get_unchecked ( i + MAX_SIZE )
58- | * current. get_unchecked ( i - MAX_SIZE ) ;
54+ * maps. get_unchecked_mut ( layer + 1 ) . get_unchecked_mut ( i) =
55+ * maps. get_unchecked_mut ( layer) . get_unchecked ( i - 1 )
56+ | * maps. get_unchecked_mut ( layer) . get_unchecked ( i + 1 )
57+ | * maps. get_unchecked_mut ( layer) . get_unchecked ( i + MAX_SIZE )
58+ | * maps. get_unchecked_mut ( layer) . get_unchecked ( i - MAX_SIZE ) ;
5959 }
60-
61- std:: mem:: swap ( & mut current, & mut next) ;
62- next. fill ( 0 ) ;
6360 }
6461
6562 let ( len9, positions9) = * positions. get_unchecked ( 8 ) ;
6663 for i in & positions9[ ..len9 as usize ] {
6764 let i = * i as usize ;
68- sum += ( * current . get_unchecked ( i - 1 )
69- | * current . get_unchecked ( i + 1 )
70- | * current . get_unchecked ( i + MAX_SIZE )
71- | * current . get_unchecked ( i - MAX_SIZE ) )
65+ sum += ( * maps . get_unchecked_mut ( 8 ) . get_unchecked ( i - 1 )
66+ | * maps . get_unchecked_mut ( 8 ) . get_unchecked ( i + 1 )
67+ | * maps . get_unchecked_mut ( 8 ) . get_unchecked ( i + MAX_SIZE )
68+ | * maps . get_unchecked_mut ( 8 ) . get_unchecked ( i - MAX_SIZE ) )
7269 . count_ones ( ) ;
7370 }
7471
0 commit comments