File tree Expand file tree Collapse file tree 1 file changed +13
-12
lines changed Expand file tree Collapse file tree 1 file changed +13
-12
lines changed Original file line number Diff line number Diff line change 1- use std:: collections:: HashMap ;
2-
31fn parse_input ( input : & str ) -> Vec < usize > {
42 input
53 . trim ( )
@@ -10,20 +8,23 @@ fn parse_input(input: &str) -> Vec<usize> {
108
119fn target_number ( numbers : Vec < usize > , target : usize ) -> usize {
1210 let n = numbers. len ( ) ;
13- let mut visited = numbers
14- . iter ( )
15- . take ( n - 1 )
16- . enumerate ( )
17- . map ( |( i, & num) | ( num, vec ! [ i + 1 ] ) )
18- . collect :: < HashMap < _ , _ > > ( ) ;
11+ // Use a Vec instead of HashMap for better performance
12+ // Since we're dealing with the last spoken number -> (turn last spoken, current turn)
13+ let mut visited = vec ! [ None ; target] ;
14+
15+ // Initialize with starting numbers
16+ for ( i, & num) in numbers. iter ( ) . take ( n - 1 ) . enumerate ( ) {
17+ visited[ num] = Some ( ( 0 , i + 1 ) ) ;
18+ }
19+
1920 let mut last = numbers[ n - 1 ] ;
2021 for i in numbers. len ( ) ..target {
21- if let Some ( prev) = visited. get_mut ( & last) {
22- let j = * prev. last ( ) . unwrap ( ) ;
23- * prev = vec ! [ j, i] ;
22+ if let Some ( prev) = visited. get_mut ( last) . and_then ( |v| v . as_mut ( ) ) {
23+ let j = prev. 1 ;
24+ * prev = ( j, i) ;
2425 last = i - j;
2526 } else {
26- visited. insert ( last, vec ! [ i ] ) ;
27+ visited[ last] = Some ( ( 0 , i ) ) ;
2728 last = 0 ;
2829 }
2930 }
You can’t perform that action at this time.
0 commit comments