From 94a69f00d5a52eacefd1269c78680ca6ee324e05 Mon Sep 17 00:00:00 2001 From: Noratrieb <48135649+Noratrieb@users.noreply.github.com> Date: Sun, 10 Nov 2024 16:59:15 +0100 Subject: [PATCH] optimize day 1 2022 --- 2022/day01/src/lib.rs | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/2022/day01/src/lib.rs b/2022/day01/src/lib.rs index 61cce8f..c7894ec 100644 --- a/2022/day01/src/lib.rs +++ b/2022/day01/src/lib.rs @@ -1,3 +1,5 @@ +#![feature(iter_array_chunks)] + use helper::{parse_unwrap, Day, Variants}; pub fn main() { @@ -12,7 +14,8 @@ helper::define_variants! { basic => crate::part1; } part2 { - basic => crate::part2; + basic => crate::part2_basic; + no_alloc => crate::part2_no_alloc; } } @@ -35,7 +38,7 @@ fn part1(input: &str) -> u64 { .unwrap() } -fn part2(input: &str) -> u64 { +fn part2_basic(input: &str) -> u64 { let mut all = input .trim() .split("\n\n") @@ -45,6 +48,35 @@ fn part2(input: &str) -> u64 { all[(all.len() - 3)..].iter().copied().sum::() } + +fn part2_no_alloc(input: &str) -> u64 { + let mut biggest = [0; 3]; + + let elves = input + .trim() + .split("\n\n") + .map(|elf| elf.trim().split("\n").map(parse_unwrap).sum::()); + + for elf in elves { + if elf > biggest[0] { + if elf > biggest[1] { + if elf > biggest[2] { + biggest[0] = biggest[1]; + biggest[1] = biggest[2]; + biggest[2] = elf; + } else { + biggest[0] = biggest[1]; + biggest[1] = elf; + } + } else { + biggest[0] = elf; + } + } + } + + biggest[0] + biggest[1] + biggest[2] +} + helper::tests! { day01 Day01; part1 {