@@ -18,24 +18,27 @@ static mut RESULT: [u8; 128] = [0; 128];
1818pub fn part1 ( s : & str ) -> & ' static str {
1919 unsafe {
2020 let s = s. as_bytes ( ) ;
21- let mut i = 13 ;
22- let mut a = ( * s. get_unchecked ( 12 ) - b'0' ) as u64 ;
23- while * s. get_unchecked ( i) != b'\n' {
24- a *= 10 ;
25- a += ( * s. get_unchecked ( i) - b'0' ) as u64 ;
26- i += 1 ;
27- }
28- i += 39 ;
21+ let mut a = ( * s. get_unchecked ( 12 ) as u64 ) * 10000000
22+ + ( * s. get_unchecked ( 13 ) as u64 ) * 1000000
23+ + ( * s. get_unchecked ( 14 ) as u64 ) * 100000
24+ + ( * s. get_unchecked ( 15 ) as u64 ) * 10000
25+ + ( * s. get_unchecked ( 16 ) as u64 ) * 1000
26+ + ( * s. get_unchecked ( 17 ) as u64 ) * 100
27+ + ( * s. get_unchecked ( 18 ) as u64 ) * 10
28+ + ( * s. get_unchecked ( 19 ) as u64 ) * 1
29+ - ( b'0' as u64 * 11111111 ) ;
30+
31+ const I : usize = 59 ;
2932
30- let x = ( * s. get_unchecked ( i + 6 ) - b'0' ) as u64 ;
33+ let x = ( * s. get_unchecked ( I + 6 ) - b'0' ) as u64 ;
3134
32- let o1 = * s. get_unchecked ( i + 12 ) ;
33- let o3 = * s. get_unchecked ( i + 20 ) ;
35+ let o1 = * s. get_unchecked ( I + 12 ) ;
36+ let o3 = * s. get_unchecked ( I + 20 ) ;
3437
3538 let y = match ( o1, o3) {
36- ( b'1' , _) => * s. get_unchecked ( i + 14 ) - b'0' ,
37- ( _, b'1' ) => * s. get_unchecked ( i + 22 ) - b'0' ,
38- _ => * s. get_unchecked ( i + 18 ) - b'0' ,
39+ ( b'1' , _) => * s. get_unchecked ( I + 14 ) - b'0' ,
40+ ( _, b'1' ) => * s. get_unchecked ( I + 22 ) - b'0' ,
41+ _ => * s. get_unchecked ( I + 18 ) - b'0' ,
3942 } as u64 ;
4043
4144 let result_ptr = ( & raw mut RESULT ) . cast :: < u8 > ( ) ;
@@ -136,56 +139,52 @@ pub fn part2(s: &str) -> u64 {
136139 unsafe {
137140 let s = s. as_bytes ( ) ;
138141
139- let mut i = 13 ;
140- while * s. get_unchecked ( i) != b'\n' {
141- i += 1 ;
142- }
143- i += 39 ;
142+ const I : usize = 59 ;
144143
145- let x = ( * s. get_unchecked ( i + 6 ) - b'0' ) as usize ;
144+ let x = ( * s. get_unchecked ( I + 6 ) - b'0' ) as usize ;
146145
147- let o1 = * s. get_unchecked ( i + 12 ) ;
148- let o3 = * s. get_unchecked ( i + 20 ) ;
146+ let o1 = * s. get_unchecked ( I + 12 ) ;
147+ let o3 = * s. get_unchecked ( I + 20 ) ;
149148
150149 let a = match ( o1, o3) {
151150 ( b'1' , b'0' ) => {
152- let y = ( * s. get_unchecked ( i + 14 ) - b'0' ) as usize ;
153- let z = ( * s. get_unchecked ( i + 18 ) - b'0' ) as usize ;
151+ let y = ( * s. get_unchecked ( I + 14 ) - b'0' ) as usize ;
152+ let z = ( * s. get_unchecked ( I + 18 ) - b'0' ) as usize ;
154153 * LUT . get_unchecked ( x * 512 + y * 64 + z * 8 + 0 )
155154 }
156155 ( b'1' , b'5' ) => {
157- let y = ( * s. get_unchecked ( i + 14 ) - b'0' ) as usize ;
158- let z = ( * s. get_unchecked ( i + 18 ) - b'0' ) as usize ;
156+ let y = ( * s. get_unchecked ( I + 14 ) - b'0' ) as usize ;
157+ let z = ( * s. get_unchecked ( I + 18 ) - b'0' ) as usize ;
159158 * LUT . get_unchecked ( x * 512 + y * 64 + z * 8 + 1 )
160159 }
161160 ( b'1' , b'4' ) => {
162- let y = ( * s. get_unchecked ( i + 14 ) - b'0' ) as usize ;
163- let z = ( * s. get_unchecked ( i + 22 ) - b'0' ) as usize ;
161+ let y = ( * s. get_unchecked ( I + 14 ) - b'0' ) as usize ;
162+ let z = ( * s. get_unchecked ( I + 22 ) - b'0' ) as usize ;
164163 * LUT . get_unchecked ( x * 512 + y * 64 + z * 8 + 2 )
165164 }
166165 ( b'0' , b'4' ) => {
167- let y = ( * s. get_unchecked ( i + 18 ) - b'0' ) as usize ;
168- let z = ( * s. get_unchecked ( i + 22 ) - b'0' ) as usize ;
166+ let y = ( * s. get_unchecked ( I + 18 ) - b'0' ) as usize ;
167+ let z = ( * s. get_unchecked ( I + 22 ) - b'0' ) as usize ;
169168 * LUT . get_unchecked ( x * 512 + y * 64 + z * 8 + 3 )
170169 }
171170 ( b'0' , b'1' ) => {
172- let y = ( * s. get_unchecked ( i + 22 ) - b'0' ) as usize ;
173- let z = ( * s. get_unchecked ( i + 18 ) - b'0' ) as usize ;
171+ let y = ( * s. get_unchecked ( I + 22 ) - b'0' ) as usize ;
172+ let z = ( * s. get_unchecked ( I + 18 ) - b'0' ) as usize ;
174173 * LUT . get_unchecked ( x * 512 + y * 64 + z * 8 + 4 )
175174 }
176175 ( b'4' , b'0' ) => {
177- let y = ( * s. get_unchecked ( i + 18 ) - b'0' ) as usize ;
178- let z = ( * s. get_unchecked ( i + 14 ) - b'0' ) as usize ;
176+ let y = ( * s. get_unchecked ( I + 18 ) - b'0' ) as usize ;
177+ let z = ( * s. get_unchecked ( I + 14 ) - b'0' ) as usize ;
179178 * LUT . get_unchecked ( x * 512 + y * 64 + z * 8 + 5 )
180179 }
181180 ( b'4' , b'5' ) => {
182- let y = ( * s. get_unchecked ( i + 18 ) - b'0' ) as usize ;
183- let z = ( * s. get_unchecked ( i + 14 ) - b'0' ) as usize ;
181+ let y = ( * s. get_unchecked ( I + 18 ) - b'0' ) as usize ;
182+ let z = ( * s. get_unchecked ( I + 14 ) - b'0' ) as usize ;
184183 * LUT . get_unchecked ( x * 512 + y * 64 + z * 8 + 6 )
185184 }
186185 ( b'4' , b'1' ) => {
187- let y = ( * s. get_unchecked ( i + 22 ) - b'0' ) as usize ;
188- let z = ( * s. get_unchecked ( i + 14 ) - b'0' ) as usize ;
186+ let y = ( * s. get_unchecked ( I + 22 ) - b'0' ) as usize ;
187+ let z = ( * s. get_unchecked ( I + 14 ) - b'0' ) as usize ;
189188 * LUT . get_unchecked ( x * 512 + y * 64 + z * 8 + 7 )
190189 }
191190 _ => unreachable_unchecked ( ) ,
0 commit comments