|
1 | 1 | #![allow(clippy::unwrap_used)]
|
2 | 2 |
|
3 |
| -fn collect_elves(lines: &Vec<String>) -> Vec<Vec<usize>> { |
4 |
| - let mut elves = Vec::<Vec<usize>>::new(); |
5 |
| - let mut elf = Vec::<usize>::new(); |
6 |
| - |
7 |
| - for line in lines { |
8 |
| - if line.is_empty() { |
9 |
| - elves.push(elf); |
10 |
| - elf = Vec::<usize>::new(); |
11 |
| - } else { |
12 |
| - elf.push(line.parse().unwrap()); |
13 |
| - } |
14 |
| - } |
15 |
| - elves.push(elf); |
16 |
| - |
17 |
| - elves |
| 3 | +fn collect_elves(lines: &str) -> Vec<Vec<u32>> { |
| 4 | + lines |
| 5 | + .split("\n\n") |
| 6 | + .map(|elf| elf.lines().map(|x| x.parse().unwrap()).collect()) |
| 7 | + .collect() |
18 | 8 | }
|
19 | 9 |
|
20 |
| -fn part1(lines: &Vec<String>) -> usize { |
21 |
| - collect_elves(lines) |
22 |
| - .iter() |
23 |
| - .map(|elf| elf.iter().sum::<usize>()) |
24 |
| - .max() |
25 |
| - .unwrap() |
| 10 | +fn sum_elves(elves: &[Vec<u32>]) -> Vec<u32> { |
| 11 | + elves.iter().map(|elf| elf.iter().sum()).collect() |
26 | 12 | }
|
27 | 13 |
|
28 |
| -fn part2(lines: &Vec<String>) -> usize { |
29 |
| - let mut elves = collect_elves(lines) |
30 |
| - .iter() |
31 |
| - .map(|elf| elf.iter().sum::<usize>()) |
32 |
| - .collect::<Vec<usize>>(); |
| 14 | +fn part1(lines: &str) -> u32 { |
| 15 | + *sum_elves(&collect_elves(lines)).iter().max().unwrap() |
| 16 | +} |
33 | 17 |
|
| 18 | +fn part2(lines: &str) -> u32 { |
| 19 | + let mut elves = sum_elves(&collect_elves(lines)); |
34 | 20 | elves.sort_unstable();
|
35 |
| - |
36 | 21 | elves.iter().rev().take(3).sum()
|
37 | 22 | }
|
38 | 23 |
|
39 | 24 | fn main() {
|
40 |
| - let lines = util::collect_lines(format!("{}/input", env!("CARGO_PKG_NAME"))).unwrap(); |
| 25 | + let lines = std::fs::read_to_string(format!("{}/input", env!("CARGO_PKG_NAME"))).unwrap(); |
41 | 26 | println!("{}", part1(&lines));
|
42 | 27 | println!("{}", part2(&lines));
|
43 | 28 | }
|
44 | 29 |
|
45 | 30 | #[test]
|
46 | 31 | #[allow(clippy::unwrap_used)]
|
47 | 32 | fn day01() {
|
48 |
| - let lines = util::collect_lines("sample").unwrap(); |
| 33 | + let lines = std::fs::read_to_string("sample").unwrap(); |
49 | 34 | assert_eq!(part1(&lines), 24000);
|
50 | 35 | assert_eq!(part2(&lines), 45000);
|
51 | 36 | }
|
0 commit comments