@@ -14,10 +14,9 @@ type Input = [i32; 3];
1414
1515pub fn parse ( input : & str ) -> Input {
1616 let code: Vec < _ > = input. iter_unsigned ( ) . collect ( ) ;
17-
18- let c = check ( & code, 0 , 0 ) as i32 ;
19- let a = check ( & code, 1 , 0 ) as i32 ;
20- let b = check ( & code, 0 , 1 ) as i32 ;
17+ let a = check ( & code, 1 , 0 ) ;
18+ let b = check ( & code, 0 , 1 ) ;
19+ let c = check ( & code, 0 , 0 ) ;
2120
2221 [ a - c, b - c, c]
2322}
@@ -35,22 +34,18 @@ pub fn part2([a, b, c]: &Input) -> i32 {
3534 . unwrap ( )
3635}
3736
38- fn check ( input : & [ usize ] , first : usize , second : usize ) -> usize {
39- let mut code = input. to_vec ( ) ;
37+ fn check ( code : & [ usize ] , first : usize , second : usize ) -> i32 {
38+ let mut pc = 0 ;
39+ let code = & mut code. to_vec ( ) [ ..] ;
40+
4041 code[ 1 ] = first;
4142 code[ 2 ] = second;
4243
43- execute ( & mut code)
44- }
45-
46- fn execute ( code : & mut [ usize ] ) -> usize {
47- let mut pc = 0 ;
48-
4944 loop {
5045 match code[ pc] {
5146 1 => code[ code[ pc + 3 ] ] = code[ code[ pc + 1 ] ] + code[ code[ pc + 2 ] ] ,
5247 2 => code[ code[ pc + 3 ] ] = code[ code[ pc + 1 ] ] * code[ code[ pc + 2 ] ] ,
53- _ => break code[ 0 ] ,
48+ _ => break code[ 0 ] as i32 ,
5449 }
5550 pc += 4 ;
5651 }
0 commit comments