feat(tazjin/aoc2022): at least do day 1

this way I can at least claim to not have completely ignored it this
year :p

Change-Id: I59ab58a05e6bc217e9c6d9fa830d321ddff71d8a
Reviewed-on: https://cl.tvl.fyi/c/depot/+/7608
Autosubmit: tazjin <tazjin@tvl.su>
Reviewed-by: tazjin <tazjin@tvl.su>
Tested-by: BuildkiteCI
This commit is contained in:
Vincent Ambo 2022-12-21 02:59:09 +03:00 committed by clbot
parent c3c29827ed
commit 3843b46348

View file

@ -0,0 +1,27 @@
// AoC 2022 - day 1.
fn sum_elf(elf: &str) -> usize {
elf.lines()
.map(|s| s.parse::<usize>().expect("invalid input"))
.sum()
}
fn group_by_elf(input: &str) -> Vec<usize> {
input.rsplit("\n\n").map(sum_elf).collect()
}
fn top_elf(input: &str) -> usize {
group_by_elf(&input).into_iter().max().unwrap()
}
fn top_n_elves(n: usize, input: &str) -> usize {
let mut by_elf = group_by_elf(input);
by_elf.sort_by(|a, b| b.cmp(a)); // high->low
(by_elf[..n]).iter().sum()
}
fn main() {
let input = std::fs::read_to_string("input").expect("input should be in file named 'input'");
println!("top elf: {}", top_elf(&input));
println!("top 3 elves: {}", top_n_elves(3, &input));
}