Skip to content

Commit c396dfe

Browse files
committed
refactor(05/2024): improve readability
1 parent a4adb9e commit c396dfe

File tree

1 file changed

+17
-19
lines changed

1 file changed

+17
-19
lines changed

src/solutions/year2024/day05.rs

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -22,25 +22,7 @@ impl Solution for Day05 {
2222
page_updates
2323
.iter()
2424
.filter(|&update| !update.apply_all(&page_ordering_rules))
25-
.map(|update| {
26-
let mut new_pages = update.pages.clone();
27-
28-
new_pages.sort_by(|a, b| {
29-
let rule = page_ordering_rules
30-
.clone()
31-
.into_iter()
32-
.find(|r| r.first == *a && r.second == *b);
33-
34-
match rule {
35-
None => Ordering::Greater,
36-
Some(_) => Ordering::Less,
37-
}
38-
});
39-
40-
let new_update = Update { pages: new_pages };
41-
42-
new_update.middle_page()
43-
})
25+
.map(|update| update.sorted_by_rules(&page_ordering_rules).middle_page())
4426
.sum::<usize>()
4527
.to_string()
4628
}
@@ -111,6 +93,22 @@ impl Update {
11193

11294
*self.pages.get(mid).unwrap()
11395
}
96+
97+
fn sorted_by_rules(&self, rules: &[Rule]) -> Self {
98+
let mut pages = self.pages.clone();
99+
100+
pages.sort_by(|a, b| {
101+
let has_rule = rules.iter().any(|r| r.first == *a && r.second == *b);
102+
103+
if has_rule {
104+
Ordering::Less
105+
} else {
106+
Ordering::Greater
107+
}
108+
});
109+
110+
Self { pages }
111+
}
114112
}
115113

116114
#[cfg(test)]

0 commit comments

Comments
 (0)