@@ -30,7 +30,8 @@ unsafe fn part1_inner(s: &str) -> u64 {
3030 let mut sum = 0 ;
3131
3232 let mut i = 0 ;
33- let mut v = Vec :: with_capacity ( 15 ) ;
33+ let mut v = [ 0 ; 15 ] ;
34+ let mut v_len = 0 ;
3435
3536 while i < s. len ( ) {
3637 let mut target: u64 = 0 ;
@@ -47,7 +48,8 @@ unsafe fn part1_inner(s: &str) -> u64 {
4748 num += ( * s. get_unchecked ( i) - b'0' ) as u64 ;
4849 i += 1 ;
4950 if !s. get_unchecked ( i) . is_ascii_digit ( ) {
50- v. push ( num) ;
51+ * v. get_unchecked_mut ( v_len) = num;
52+ v_len += 1 ;
5153 num = 0 ;
5254 i += 1 ;
5355 if * s. get_unchecked ( i - 1 ) == b'\n' {
@@ -56,10 +58,10 @@ unsafe fn part1_inner(s: &str) -> u64 {
5658 }
5759 }
5860
59- if search ( target, & v) {
61+ if search ( target, & v. get_unchecked ( ..v_len ) ) {
6062 sum += target;
6163 }
62- v . clear ( ) ;
64+ v_len = 0 ;
6365 }
6466
6567 sum
@@ -103,7 +105,8 @@ unsafe fn part2_inner(s: &str) -> u64 {
103105 let mut sum = 0 ;
104106
105107 let mut i = 0 ;
106- let mut v = Vec :: with_capacity ( 15 ) ;
108+ let mut v = [ 0 ; 15 ] ;
109+ let mut v_len = 0 ;
107110
108111 while i < s. len ( ) {
109112 let mut target: u64 = 0 ;
@@ -120,7 +123,8 @@ unsafe fn part2_inner(s: &str) -> u64 {
120123 num += ( * s. get_unchecked ( i) - b'0' ) as u64 ;
121124 i += 1 ;
122125 if !s. get_unchecked ( i) . is_ascii_digit ( ) {
123- v. push ( num) ;
126+ * v. get_unchecked_mut ( v_len) = num;
127+ v_len += 1 ;
124128 num = 0 ;
125129 i += 1 ;
126130 if * s. get_unchecked ( i - 1 ) == b'\n' {
@@ -129,10 +133,10 @@ unsafe fn part2_inner(s: &str) -> u64 {
129133 }
130134 }
131135
132- if search_part2 ( target, & v) {
136+ if search_part2 ( target, & v. get_unchecked ( ..v_len ) ) {
133137 sum += target;
134138 }
135- v . clear ( ) ;
139+ v_len = 0 ;
136140 }
137141
138142 sum
0 commit comments