Skip to content

Commit 773f5d9

Browse files
committed
AoC, day 1: Refactor, more idiomatic
1 parent bbdca21 commit 773f5d9

File tree

1 file changed

+14
-29
lines changed

1 file changed

+14
-29
lines changed

2022/day01/src/main.rs

Lines changed: 14 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,36 @@
11
#![allow(clippy::unwrap_used)]
22

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()
188
}
199

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()
2612
}
2713

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

18+
fn part2(lines: &str) -> u32 {
19+
let mut elves = sum_elves(&collect_elves(lines));
3420
elves.sort_unstable();
35-
3621
elves.iter().rev().take(3).sum()
3722
}
3823

3924
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();
4126
println!("{}", part1(&lines));
4227
println!("{}", part2(&lines));
4328
}
4429

4530
#[test]
4631
#[allow(clippy::unwrap_used)]
4732
fn day01() {
48-
let lines = util::collect_lines("sample").unwrap();
33+
let lines = std::fs::read_to_string("sample").unwrap();
4934
assert_eq!(part1(&lines), 24000);
5035
assert_eq!(part2(&lines), 45000);
5136
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy