From 3843b46348510665740dc412ca125a25995dc986 Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Wed, 21 Dec 2022 02:59:09 +0300 Subject: 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 Reviewed-by: tazjin Tested-by: BuildkiteCI --- users/tazjin/aoc2022/day1.rs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 users/tazjin/aoc2022/day1.rs (limited to 'users') diff --git a/users/tazjin/aoc2022/day1.rs b/users/tazjin/aoc2022/day1.rs new file mode 100644 index 0000000000..078eb25f03 --- /dev/null +++ b/users/tazjin/aoc2022/day1.rs @@ -0,0 +1,27 @@ +// AoC 2022 - day 1. + +fn sum_elf(elf: &str) -> usize { + elf.lines() + .map(|s| s.parse::().expect("invalid input")) + .sum() +} + +fn group_by_elf(input: &str) -> Vec { + 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)); +} -- cgit 1.4.1