@@ -7,9 +7,11 @@ fn part1(input: &str) -> usize {
7
7
let mut map = HashMap :: < usize , Vec < usize > > :: new ( ) ;
8
8
split. 0 . lines ( ) . for_each ( |l| {
9
9
let s = l. split_once ( '|' ) . unwrap ( ) ;
10
+ let value = s. 0 . parse :: < usize > ( ) . unwrap ( ) ;
10
11
map. entry ( s. 1 . parse :: < usize > ( ) . unwrap ( ) )
11
12
. or_default ( )
12
- . push ( s. 0 . parse :: < usize > ( ) . unwrap ( ) ) ;
13
+ . push ( value) ;
14
+ map. entry ( value) . or_default ( ) ;
13
15
} ) ;
14
16
map
15
17
} ;
@@ -21,7 +23,7 @@ fn part1(input: &str) -> usize {
21
23
updates
22
24
. filter_map ( |update| {
23
25
update
24
- . is_sorted_by ( |a, b| ordering. get ( b ) . map ( |v| v . contains ( a) ) . unwrap_or_default ( ) )
26
+ . is_sorted_by ( |a, b| ordering[ b ] . contains ( a) )
25
27
. then_some ( update[ update. len ( ) / 2 ] )
26
28
} )
27
29
. sum ( )
@@ -32,9 +34,11 @@ fn part2(input: &str) -> usize {
32
34
let mut map = HashMap :: < usize , Vec < usize > > :: new ( ) ;
33
35
split. 0 . lines ( ) . for_each ( |l| {
34
36
let s = l. split_once ( '|' ) . unwrap ( ) ;
37
+ let value = s. 0 . parse :: < usize > ( ) . unwrap ( ) ;
35
38
map. entry ( s. 1 . parse :: < usize > ( ) . unwrap ( ) )
36
39
. or_default ( )
37
- . push ( s. 0 . parse :: < usize > ( ) . unwrap ( ) ) ;
40
+ . push ( value) ;
41
+ map. entry ( value) . or_default ( ) ;
38
42
} ) ;
39
43
map
40
44
} ;
@@ -45,16 +49,8 @@ fn part2(input: &str) -> usize {
45
49
} ) ;
46
50
updates
47
51
. filter_map ( |mut update| {
48
- if !update
49
- . is_sorted_by ( |a, b| ordering. get ( b) . map ( |v| v. contains ( a) ) . unwrap_or_default ( ) )
50
- {
51
- update. sort_by ( |a, b| {
52
- ordering
53
- . get ( b)
54
- . map ( |v| v. contains ( a) )
55
- . unwrap_or_default ( )
56
- . cmp ( & true )
57
- } ) ;
52
+ if !update. is_sorted_by ( |a, b| ordering[ b] . contains ( a) ) {
53
+ update. sort_by ( |a, b| ordering[ b] . contains ( a) . cmp ( & true ) ) ;
58
54
return Some ( update[ update. len ( ) / 2 ] ) ;
59
55
}
60
56
None
0 commit comments