11use aoc_runner_derive:: aoc;
22
3- const MAX_SIZE : usize = 64 ;
3+ const MAX_SIZE : usize = 50 ;
44const BIG_SIZE : usize = MAX_SIZE * ( MAX_SIZE + 2 ) ;
55
66#[ aoc( day10, part1) ]
@@ -12,9 +12,9 @@ pub fn part1(s: &str) -> u32 {
1212unsafe fn part1_inner ( s : & str ) -> u32 {
1313 let s = s. as_bytes ( ) ;
1414
15- let mut positions = [ ( 0usize , [ 0usize ; MAX_SIZE * MAX_SIZE / 9 ] ) ; 9 ] ;
15+ let mut positions = [ ( 0u16 , [ 0u16 ; MAX_SIZE * MAX_SIZE / 9 ] ) ; 9 ] ;
1616
17- let mut zeros = [ 0usize ; MAX_SIZE * MAX_SIZE / 9 ] ;
17+ let mut zeros = [ 0u16 ; MAX_SIZE * MAX_SIZE / 9 ] ;
1818 let mut zeros_i = 0 ;
1919
2020 let mut y = 0 ;
@@ -29,11 +29,11 @@ unsafe fn part1_inner(s: &str) -> u32 {
2929
3030 let layer = ( c - b'0' ) as usize ;
3131 if layer == 0 {
32- zeros[ zeros_i] = y * MAX_SIZE + x + MAX_SIZE ;
32+ zeros[ zeros_i as usize ] = ( y * MAX_SIZE + x + MAX_SIZE ) as u16 ;
3333 zeros_i += 1 ;
3434 } else {
3535 let len = positions[ layer - 1 ] . 0 ;
36- positions[ layer - 1 ] . 1 [ len] = y * MAX_SIZE + x + MAX_SIZE ;
36+ positions[ layer - 1 ] . 1 [ len as usize ] = ( y * MAX_SIZE + x + MAX_SIZE ) as u16 ;
3737 positions[ layer - 1 ] . 0 += 1 ;
3838 }
3939 x += 1 ;
@@ -44,13 +44,13 @@ unsafe fn part1_inner(s: &str) -> u32 {
4444
4545 let mut sum = 0 ;
4646 for i in & zeros[ ..zeros_i] {
47- current[ * i] = true ;
47+ current[ * i as usize ] = true ;
4848
4949 for layer in 0 ..8 {
5050 let ( len, positions) = positions[ layer] ;
5151
52- for i in & positions[ ..len] {
53- let i = * i;
52+ for i in & positions[ ..len as usize ] {
53+ let i = * i as usize ;
5454 next[ i] = current[ i - 1 ]
5555 || current[ i + 1 ]
5656 || current[ i + MAX_SIZE ]
@@ -62,7 +62,8 @@ unsafe fn part1_inner(s: &str) -> u32 {
6262 }
6363
6464 let ( len9, positions9) = positions[ 8 ] ;
65- for i in & positions9[ ..len9] {
65+ for i in & positions9[ ..len9 as usize ] {
66+ let i = * i as usize ;
6667 if current[ i - 1 ] || current[ i + 1 ] || current[ i + MAX_SIZE ] || current[ i - MAX_SIZE ] {
6768 sum += 1 ;
6869 }
@@ -82,7 +83,7 @@ pub fn part2(s: &str) -> u16 {
8283unsafe fn part2_inner ( s : & str ) -> u16 {
8384 let s = s. as_bytes ( ) ;
8485
85- let mut positions = [ ( 0usize , [ 0usize ; MAX_SIZE * MAX_SIZE / 9 ] ) ; 9 ] ;
86+ let mut positions = [ ( 0u16 , [ 0u16 ; MAX_SIZE * MAX_SIZE / 9 ] ) ; 9 ] ;
8687 let mut first_map = [ 0u16 ; BIG_SIZE ] ;
8788
8889 let mut y = 0 ;
@@ -99,8 +100,8 @@ unsafe fn part2_inner(s: &str) -> u16 {
99100 if layer == 0 {
100101 first_map[ y * MAX_SIZE + x + MAX_SIZE ] = 1 ;
101102 } else {
102- let len = positions[ layer - 1 ] . 0 ;
103- positions[ layer - 1 ] . 1 [ len] = y * MAX_SIZE + x + MAX_SIZE ;
103+ let len = positions[ layer - 1 ] . 0 as usize ;
104+ positions[ layer - 1 ] . 1 [ len] = ( y * MAX_SIZE + x + MAX_SIZE ) as u16 ;
104105 positions[ layer - 1 ] . 0 += 1 ;
105106 }
106107 x += 1 ;
@@ -114,8 +115,8 @@ unsafe fn part2_inner(s: &str) -> u16 {
114115 for layer in 0 ..8 {
115116 let ( len, positions) = positions[ layer] ;
116117
117- for i in & positions[ ..len] {
118- let i = * i;
118+ for i in & positions[ ..len as usize ] {
119+ let i = * i as usize ;
119120 next[ i] =
120121 current[ i - 1 ] + current[ i + 1 ] + current[ i + MAX_SIZE ] + current[ i - MAX_SIZE ] ;
121122 }
@@ -125,7 +126,8 @@ unsafe fn part2_inner(s: &str) -> u16 {
125126 }
126127
127128 let ( len9, positions9) = positions[ 8 ] ;
128- for i in & positions9[ ..len9] {
129+ for i in & positions9[ ..len9 as usize ] {
130+ let i = * i as usize ;
129131 sum += current[ i - 1 ] + current[ i + 1 ] + current[ i + MAX_SIZE ] + current[ i - MAX_SIZE ] ;
130132 }
131133
0 commit comments