Skip to content
This repository was archived by the owner on Dec 25, 2024. It is now read-only.

Commit 1907f7f

Browse files
committed
Refactor day 01
1 parent 0b891c4 commit 1907f7f

File tree

1 file changed

+27
-35
lines changed

1 file changed

+27
-35
lines changed

src/bin/day01/main.rs

Lines changed: 27 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2,54 +2,46 @@ use std::collections::HashMap;
22

33
const ACTUAL_INPUT: &str = include_str!("../../../actual_inputs/2024/01/input.txt");
44

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+
}
1922

20-
acc
21-
});
23+
fn p1(input: &str) -> String {
24+
let (mut left_list, mut right_list) = read_input(input);
2225

2326
left_list.sort_unstable();
2427
right_list.sort_unstable();
2528

2629
left_list
2730
.into_iter()
28-
.zip(right_list.into_iter())
31+
.zip(right_list)
2932
.map(|(left, right)| left.max(right) - left.min(right))
3033
.sum::<i32>()
3134
.to_string()
3235
}
3336

3437
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+
});
5345

5446
left_list
5547
.into_iter()

0 commit comments

Comments
 (0)