@@ -2,54 +2,46 @@ use std::collections::HashMap;
2
2
3
3
const ACTUAL_INPUT : & str = include_str ! ( "../../../actual_inputs/2024/01/input.txt" ) ;
4
4
5
- fn p1 ( input : & str ) -> String {
6
- let ( mut left_list, mut right_list) =
7
- input
8
- . trim ( )
9
- . lines ( )
10
- . fold ( ( vec ! [ ] , vec ! [ ] ) , |mut acc, line| {
11
- let values = line. split_whitespace ( ) . collect :: < Vec < _ > > ( ) ;
12
-
13
- if values. len ( ) != 2 {
14
- panic ! ( "Expect two values per line, but {line} is not" ) ;
15
- }
16
-
17
- acc. 0 . push ( values[ 0 ] . parse :: < i32 > ( ) . expect ( "not a number" ) ) ;
18
- acc. 1 . push ( values[ 1 ] . parse :: < i32 > ( ) . expect ( "not a number" ) ) ;
5
+ fn read_input ( input : & str ) -> ( Vec < i32 > , Vec < i32 > ) {
6
+ input
7
+ . trim ( )
8
+ . lines ( )
9
+ . fold ( ( vec ! [ ] , vec ! [ ] ) , |mut acc, line| {
10
+ let values = line. split_whitespace ( ) . collect :: < Vec < _ > > ( ) ;
11
+
12
+ if values. len ( ) != 2 {
13
+ panic ! ( "Expect two values per line, but {line} is not" ) ;
14
+ }
15
+
16
+ acc. 0 . push ( values[ 0 ] . parse ( ) . expect ( "not a number" ) ) ;
17
+ acc. 1 . push ( values[ 1 ] . parse ( ) . expect ( "not a number" ) ) ;
18
+
19
+ acc
20
+ } )
21
+ }
19
22
20
- acc
21
- } ) ;
23
+ fn p1 ( input : & str ) -> String {
24
+ let ( mut left_list , mut right_list ) = read_input ( input ) ;
22
25
23
26
left_list. sort_unstable ( ) ;
24
27
right_list. sort_unstable ( ) ;
25
28
26
29
left_list
27
30
. into_iter ( )
28
- . zip ( right_list. into_iter ( ) )
31
+ . zip ( right_list)
29
32
. map ( |( left, right) | left. max ( right) - left. min ( right) )
30
33
. sum :: < i32 > ( )
31
34
. to_string ( )
32
35
}
33
36
34
37
fn p2 ( input : & str ) -> String {
35
- let ( left_list, right_map) =
36
- input
37
- . trim ( )
38
- . lines ( )
39
- . fold ( ( vec ! [ ] , HashMap :: new ( ) ) , |mut acc, line| {
40
- let values = line. split_whitespace ( ) . collect :: < Vec < _ > > ( ) ;
41
-
42
- if values. len ( ) != 2 {
43
- panic ! ( "Expect two values per line, but {line} is not" ) ;
44
- }
45
-
46
- acc. 0 . push ( values[ 0 ] . parse :: < i32 > ( ) . expect ( "not a number" ) ) ;
47
-
48
- let right_number = values[ 1 ] . parse :: < i32 > ( ) . expect ( "not a number" ) ;
49
- * ( acc. 1 . entry ( right_number) . or_insert ( 0 ) ) += 1 ;
50
-
51
- acc
52
- } ) ;
38
+ let ( left_list, right_list) = read_input ( input) ;
39
+ let right_map = right_list
40
+ . into_iter ( )
41
+ . fold ( HashMap :: new ( ) , |mut acc, number| {
42
+ * ( acc. entry ( number) . or_insert ( 0 ) ) += 1 ;
43
+ acc
44
+ } ) ;
53
45
54
46
left_list
55
47
. into_iter ( )
0 commit comments